几天前谷歌推出了Preference Support Library
(Link).我刚刚尝试在我的应用程序中实现它,虽然看起来它不能用于SwitchPreferences
哪个是奇怪的,因为谷歌表示我们可以使用与以前相同的XML文件,并且明确表示SwitchPreferences现在可用于所有API 7+设备.
报价(来源)
[...]并使用相同的首选XML文件(http://goo.gl/wOcIxI)添加首选项,同时向所有API 7+设备添加对SwitchPreference等元素(以前仅在API 14+设备上可用)的支持.[...]
错误信息
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.my.package/com.my.package.Main}: android.view.InflateException: Binary XML file line #4: Error inflating class (not found)SwitchPreference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Run Code Online (Sandbox Code Playgroud)
相关部分显然是Binary XML file line #4: Error inflating class (not found)SwitchPreference
.
Java代码
public class FragmentSettings extends PreferenceFragmentCompat {
@Override
public …
Run Code Online (Sandbox Code Playgroud) android android-preferences android-support-library android-switch
我在带有单独菜单键的设备上遇到问题(如三星onces).在某些活动中,通过菜单键打开时,"溢出菜单项"的文本颜色为白色.通过三个点打开溢出,文本颜色始终是黑色的 - 就像它应该的那样.
按照屏幕截图显示问题.在左侧,一切都很好,通过三个点打开溢出.在右侧菜单已通过菜单键打开:
<style name="AppThemeToolbar" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/primary_color</item>
<item name="colorPrimaryDark">@color/primary_color_dark</item>
<item name="colorAccent">@color/accent_color</item>
<item name="android:textColorPrimary">@android:color/white</item>
<item name="android:textColorSecondary">@android:color/white</item>
<item name="windowActionModeOverlay">true</item>
<item name="actionModeBackground">@color/action_mode_color</item>
<item name="actionBarPopupTheme">@style/ThemeOverlay.AppCompat.Light</item>
</style>
Run Code Online (Sandbox Code Playgroud)
注意:我在多个活动中使用完全相同的主题,但在五分之三中一切都很好.这完全令人难以置信,没有意义.
所以基本上问题是:我如何解决这个问题,为什么某些活动中的textcolor会变黑,而其他活动中的texttext会变成白色(而它们都使用相同的主题)?
我尝试过的(在其他类似的帖子中找到):
panelBackground
.这很有用,不幸的是,这对我来说不是一个解决方案,因为文本颜色随意切换黑色和白色之间 - 因此根本没有我可以设置的良好背景颜色.android:panelTextAppearance
textAppearanceSmallPopupMenu
textAppearanceLargePopupMenu
popupMenuStyle
android:actionMenuTextColor
& actionMenuTextColor
我试图在我的视图中包含不同的布局,具体取决于父级Theme
.
遵循这个想法:
attrs.xml
<attr name="themeLayout" format="reference" />
Run Code Online (Sandbox Code Playgroud)
styles.xml
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="themeLayout">@layout/layout_a</item>
</style>
<style name="AppThemeSecond" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="themeLayout">@layout/layout_b</item>
</style>
Run Code Online (Sandbox Code Playgroud)
activity.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<include layout="?attr/themeLayout" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
当我运行上面的代码时,我将得到以下异常:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.my.package/com.my.package.MainActivity}: android.view.InflateException: You must specifiy a valid layout reference. The layout ID ?attr/themeLayout is not valid.
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: …
Run Code Online (Sandbox Code Playgroud) object
我的项目中有类似以下内容
object UrlUtils {
private const val PARAM = "whatever"
/**
* Method that appends the [PARAM] parameter to the url
*/
fun appendParameter(url: String) {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我想PARAM
在方法的 KDoc 注释中引用字段的值appendParameter
,但是在查看注释时,我看不到实际值,而只看到字段的名称。
将 PARAM 参数附加到 url 的方法
我想要的是:
将whatever参数附加到url的方法
在 Javadoc 中,这是通过使用来实现的{@value PARAM}
,但在 KDoc 中似乎没有类似的东西。甚至自动代码转换器也保留旧的 Javadoc。
所以我的问题是:我是否遗漏了什么,或者 KDoc/Dokka 是否缺少此功能?
根据该文件的管理REST API的SyncGateway
不应该暴露.
引用:
默认情况下,Admin REST API在端口4985上运行(除非您更改adminInterface配置参数).不要暴露此端口 - 它属于防火墙.任何能够访问此端口的人都可以免费访问和控制您的数据库和用户帐户.
这是有道理的,但我想知道如何授予我的应用服务器,该应用服务器在Google AppEngine上运行,并且处理注册/创建会话访问API而不暴露它?是否有公开Admin REST API的选项,但是限制对发送请求的特定服务器的访问权限,或者需要用户名/密码组合(如:8091
端口上的GUI)?
只是为了澄清我在评论中添加我的评论:
应用服务器(在GAE上运行)和Couchbase服务器(在DigitalOcean上运行)是两个不同的物理设备,因此具有不同的IP地址.意思是:我无法将my中的adminInterface配置参数更改syncgateway_config.json
为环回地址,因为从GAE Server到Couchbase Server的连接之后不会产生任何影响.如果我没弄错的话,服务器将无法从外部访问?!
google-app-engine couchbase couchbase-lite couchbase-sync-gateway
在我当前的项目中,我试图从 REST 端点获取新闻,并且我想UITableView
在网络请求完成后刷新它。所以我打电话reloadData()
但不幸的cellForRowAtIndexPath
是没有被调用但是numberOfRowsInSection
被调用并返回正确数量的项目。
按照我的代码剥离到相关部分:
class NewsTableViewController: UIViewController {
private var newsItems: Array<NewsItem>!
private var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
newsItems = []
addDummyItem()
prepareTableView()
getNews()
}
func addDummyItem(){
let newsItem = NewsItem()
newsItem.dateString = "12th May"
newsItem.title = "Lorem ipsum"
newsItem.imgUrl = "URL"
newsItem.url = "URL"
newsItem.message = "Lorem ipsum dolor sit amet"
self.newsItems.append(newsItem)
}
func getNews(){
let url = NSURL(string: "http://someurl.com/news")
let urlRequest: NSMutableURLRequest = NSMutableURLRequest(URL: url!)
let session …
Run Code Online (Sandbox Code Playgroud) 我试图Maybe
一次执行两个并且一旦完成就调用一个特定的方法.如果两个Observable都返回一个值,但是在某些情况下,一个人可能不会发出一个只调用doOnComplete
而不是调用的项,这是有效的doOnSuccess
.因此,如果其中一个Maybes'没有调用doOnSuccess
该zip()
块就不会被执行.我想知道如何处理这种情况?
遵循我的代码(剥离到基本部分):
private void fetchData(){
Maybe<Integer> maybeOne = getId(); // may return Maybe.empty()
Maybe<List<String>> maybeTwo = getList();
Maybe.zip(maybeOne, maybeTwo, (id, list) -> {
initView(id, list); // only called if values have been emitted
return true;
}).subscribe();
}
Run Code Online (Sandbox Code Playgroud)
我希望zip()块总是被调用,但是如果Maybe没有调用则使用null值onSuccess
.情况并非如此,我可以处理这样的情况吗?
我正在使用Firebase进行电子邮件和密码身份验证.一旦用户成功登录,我将收到一个AuthData
包含令牌的对象.
我想把这个令牌发送到我的后端,验证并从中提取uid
- 不幸的是我不知道该怎么做.
我知道Firebase的秘密,如果我去jwt.io,输入令牌和验证签名的秘密,我看到正确的有效负载 - 所以这实际上是有效的.
由于我在后端运行Java,我一直在使用jjwt进行解密过程,不幸的是它总是抛出SignatureException
:
io.jsonwebtoken.SignatureException:JWT签名与本地计算的签名不匹配.JWT有效性不能被断言,也不应该被信任.
按照我一直在使用的代码:
SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
byte[] encodedKey = Base64.decode("my-firebase-secret", Base64.DEFAULT);
Key k = new SecretKeySpec(encodedKey, signatureAlgorithm.getJcaName());
Claims claims = Jwts.parser()
.setSigningKey(k)
.parseClaimsJws("the-token").getBody();
Run Code Online (Sandbox Code Playgroud)
我也尝试过以下代码片段:
Claims claims = Jwts.parser()
.setSigningKey(DatatypeConverter.parseBase64Binary("my-firebase-secret"))
.parseClaimsJws(jwt).getBody();
Run Code Online (Sandbox Code Playgroud)
但得到了同样的例外.那么我做错了什么?提前致谢.
android ×5
couchbase ×1
firebase ×1
ios ×1
java ×1
jwt ×1
kdoc ×1
kotlin ×1
kotlin-dokka ×1
observable ×1
rx-java2 ×1
swift ×1
uitableview ×1