我想知道,如果有某种"意图"或某种东西,迫使市场以编程方式更新用户安装的应用程序.就个人而言,我认为这是一个安全风险,所以我猜想没有办法,但也许有人知道一个解决方法.
使用Android的AccountManager获取Google帐户的身份验证令牌时,我有一种奇怪的行为.
当应用程序启动时,第一次调用将getAuthToken返回一个带有空字符串的包作为标记.下一次,我调用相同的方法,它返回一个有效的令牌.
这是我的代码:
public String updateToken(final boolean invalidateToken, final Context c) {
String authToken = "";
try {
final AccountManager am = AccountManager.get(c);
final Account[] accounts = am.getAccountsByType("com.google");
final Bundle bundle = am.getAuthToken(accounts[0], "android", true,
null, null).getResult();
authToken = bundle.getString(AccountManager.KEY_AUTHTOKEN)
.toString();
if (invalidateToken) {
am.invalidateAuthToken("com.google", authToken);
authToken = updateToken(false, c);
}
} catch (final Exception e) {
//Just for debugging issues.
e.printStackTrace();
}
return authToken;
}
Run Code Online (Sandbox Code Playgroud)
在onCreate我的活动方法中调用此方法时,看起来像是返回空标记,尽管情况并非总是如此.
提前致谢.此外,我真的不知道何时使令牌无效.一天一次?每次启动?或者空标记是指示符,必须使标记无效,尽管它在下次调用时返回有效标记.
假设我想将java方法分配给方法类型Log.d(String, String)的变量x,(String, String) -> Int我这样做:
val x: (String, String) -> Int = android.util.Log::d
Run Code Online (Sandbox Code Playgroud)
编译器说:
Error:(50, 56) Overload resolution ambiguity:
public open fun d(tag: kotlin.String!, msg: kotlin.String!): kotlin.Int defined in android.util.Log
public open fun d(tag: kotlin.String!, msg: kotlin.String!, tr: kotlin.Throwable!): kotlin.Int defined in android.util.Log
Run Code Online (Sandbox Code Playgroud)
显然还有第二种方法Log.d(String, String, Throwable)但是如何告诉编译器我想要哪一种?
ART是Android上的"新"Dalvik运行时版,自Android 5.0起就取代了它.我真的很喜欢在JVM v8上运行的Kotlin和JavaFX.我不确定Kotlin编译器生成或将在其达到v1.0发布状态时生成的字节码版本.
所以问题是:ART现在能够运行"Kotlin代码"并且能够在未来运行Kotlin代码,例如当Kotlin编译器要发出Java8字节码时吗?或者ART不依赖于Kotlin编译器发出的字节码?
使用 Log4j2 2.8,有没有办法让我的日志每天轮换,但使当前文件具有常量名称?
例子:
my.log <-- current day (2017-02-13)
my-2017-02-12.log <-- last log
my-2017-02-11.log <-- second to last log
Run Code Online (Sandbox Code Playgroud)
我尝试了以下配置没有成功:
<RollingFile name="RollingFileMain" fileName="my.log"
filePattern="my-%d{yyyy-MM-dd}-%i.log">
<PatternLayout>
<Pattern>%level{length=1} %d{yyyy-MM-dd HH:mm:ss} %c{-3} (%F:%L) %m%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy/>
</Policies>
<DefaultRolloverStrategy max="2"/>
</RollingFile>
Run Code Online (Sandbox Code Playgroud)
此外,当我在某一天首次启动应用程序时,出现以下异常:
2017-02-14 09:28:38,334 main ERROR An exception occurred processing Appender RollingFileMain java.lang.NullPointerException
at org.apache.logging.log4j.core.appender.rolling.AbstractRolloverStrategy.getEligibleFiles(AbstractRolloverStrategy.java:107)
at org.apache.logging.log4j.core.appender.rolling.AbstractRolloverStrategy.getEligibleFiles(AbstractRolloverStrategy.java:96)
at org.apache.logging.log4j.core.appender.rolling.AbstractRolloverStrategy.getEligibleFiles(AbstractRolloverStrategy.java:89)
at org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy.purgeAscending(DefaultRolloverStrategy.java:212)
at org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy.purge(DefaultRolloverStrategy.java:199)
at org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy.rollover(DefaultRolloverStrategy.java:326)
at org.apache.logging.log4j.core.appender.rolling.RollingFileManager.rollover(RollingFileManager.java:310)
at org.apache.logging.log4j.core.appender.rolling.RollingFileManager.rollover(RollingFileManager.java:227)
at org.apache.logging.log4j.core.appender.rolling.RollingFileManager.checkRollover(RollingFileManager.java:207)
at org.apache.logging.log4j.core.appender.RollingFileAppender.append(RollingFileAppender.java:267)
at org.apache.logging.log4j.core.config.AppenderControl.tryCallAppender(AppenderControl.java:156)
at org.apache.logging.log4j.core.config.AppenderControl.callAppender0(AppenderControl.java:129)
at org.apache.logging.log4j.core.config.AppenderControl.callAppenderPreventRecursion(AppenderControl.java:120)
at org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:84)
at org.apache.logging.log4j.core.config.LoggerConfig.callAppenders(LoggerConfig.java:448) …Run Code Online (Sandbox Code Playgroud) 我是Kotlin Programming lang的新手.我一直在用android开发应用程序.我发现了一个数据类以构造函数String?和String
任何人都可以让我明白这一点.
data class Person(var name: String?) {
//...
}
data class Person(var name: String) {
//...
}
Run Code Online (Sandbox Code Playgroud) 我想将输入字段绑定到vue.js中的路由参数.
<input v-model="$route.params.query"/>
Run Code Online (Sandbox Code Playgroud)
可能吗?
RecyclerView库最近添加了新SortedList类.假设我有一个回调,它实现了一个compare()可以随时间变化的方法,即可以切换底层的Comparator.告诉SortedList完全使用其数据的最佳方法是什么?
java android kotlin android-support-library android-recyclerview
我是公司的自动化工程师.最近,我写了一段我的经理绝对不接受的代码.
我被要求为涉及不同GUI的测试用例编写一些脚本.我的经理不接受的代码部分是一个if/else声明,用于检查GUI中提示的当前语言.
我被指示使用Sikuli,因此,我知道应用程序当前设置的语言非常重要,因此我的脚本可以单击正确的按钮(根据语言而改变).
我的想法是代码遍历if/else语句然后指向正确的按钮.示例:该if/else语句确定"ok"按钮当前是Suomi翻译,因此它将单击正确的按钮.
这是我的代码示例:
switch (button) {
case "ok":
if (s.exists("imagerepo/language/catalan_ok.png") != null) {
s.click("imagerepo/language/catalan_ok.png");
} else if (s.exists("imagerepo/language/suomi_ok.png") != null) {
s.click("imagerepo/language/suomi_ok.png");
} else if (s.exists("imagerepo/language/italian_ok.png") != null) {
s.click("imagerepo/language/italian_ok.png");
} else if (s.exists("imagerepo/language/portuguese_ok.png") != null) {
s.click("imagerepo/language/portuguese_ok.png");
} else if (s.exists("imagerepo/language/english_ok.png") != null) {
s.click("imagerepo/language/english_ok.png");
} else if (s.exists("imagerepo/language/dutch_ok.png") != null) {
s.click("imagerepo/language/dutch_ok.png");
} else if (s.exists("imagerepo/language/spanish_ok.png") != null) {
s.click("imagerepo/language/spanish_ok.png");
} else if (s.exists("imagerepo/language/french_ok.png") != null) {
s.click("imagerepo/language/french_ok.png");
} else …Run Code Online (Sandbox Code Playgroud) 使用 Newtonsoft Json,您可以JObject通过调用将对象转换为JObject.FromObject(object).
System.Text.Json 中是否有JsonDocument从对象中获取 a 的对应项?
android ×4
kotlin ×4
java ×2
.net-core ×1
bytecode ×1
c# ×1
dalvik ×1
data-binding ×1
google-play ×1
if-statement ×1
javascript ×1
log4j2 ×1
vue-router ×1
vue.js ×1