我试图弄清楚何时使用已保存的实例状态与从共享首选项文件加载信息.我有两个我希望保存的变量,时间和分数.我想确保如果用户返回到游戏屏幕,他们的分数和时间被保存和恢复,无论它是来自onPause状态还是onStop.
我有三个键:
public static final String ARG_SCORE = "score";
public static final String ARG_TIME = "time";
public static final String SHARED_PREFS = "shared_preferences";
Run Code Online (Sandbox Code Playgroud)
如果游戏暂停并显示一个对话框,那么当用户返回时我应该这样做
public void onRestoreInstanceState(Bundle savedInstanceState){
int score = savedInstanceState.getInt(ARG_SCORE);
}
Run Code Online (Sandbox Code Playgroud)
或者我应该这样做:
protected void onResume(){
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
int score = sharedPref.getInt(getString(R.string.saved_high_score));
}
Run Code Online (Sandbox Code Playgroud)
总的来说,我需要帮助了解生命周期以及何时存储重要信息,例如游戏的时间和分数.我只需要避免用户在无法完成游戏的情况下重新启动.
最后,我假设sharedPrefs保存到xml文件.它是否正确?有没有人有一个样本xml我的sharedPrefs应该如何出现?保存到savedInstanceState包中的密钥是否也存储在xml文件中?如果是这样,任何例子?如果没有,信息存储在哪里?
谢谢!
编辑:
好的酷豆.谢谢!还有一个问题,当为存储在sharedPreferences中的键值对定义键时,例如
public static final String ARG_SCORE = "score";
Run Code Online (Sandbox Code Playgroud)
为什么存储"得分"字符串?什么时候会被使用?我总是使用类似的东西在key_value对中放置一个值
args.putInt(ARG_TIMER, timerINT);
Run Code Online (Sandbox Code Playgroud)
并使用
scoreINT=savedInstanceState.getInt(ARG_SCORE);
Run Code Online (Sandbox Code Playgroud)
为什么键ARG_SCORE需要名称?我什么时候需要这个名字?是否必须保持String类型?
xml android sharedpreferences android-lifecycle onrestoreinstancestate
如何从 javamail 获取 .jar 文件?
我正在使用 intelliJ IDEA IDE 并尝试转到项目结构 - 库 - 添加 - 位于 .jar 文件并保存。然后我去了模块并检查了导出下的框,因为我用于片段等的支持库也被检查了。
我使用 JavaMail API 在 Android 中发送电子邮件中的代码没有使用默认/内置应用程序,但没有使用。
我尝试使用完整的 .jar 文件以及在提取后使用,但都因相同的错误而失败。
我在代码编辑模式下没有收到错误,只有在编译时 gradle 构建失败并显示错误,“错误(3,6):Gradle:错误:包 javax.mail 不存在。请帮忙!
我还尝试按照如何在 Android 项目中使用外部 JAR 的说明进行操作?但我认为这些方向与 Eclipse IDE 有关。
edt: gradle-build:
Information:Compilation completed with 25 errors and 0 warnings in 25 sec
Information:25 errors
Information:0 warnings
Error:Gradle: Execution failed for task ':app:compileDebugJava'.
Run Code Online (Sandbox Code Playgroud)
编译失败;有关详细信息,请参阅编译器错误输出。C:\Users\Marcus\Documents\IdeaProjects\Android\TestProjects\TestMailFeature3\app\src\main\java\com\majorwit\testmailfeature3\app\GMailSender.java
Error:(3, 24) Gradle: error: package javax.activation does not …Run Code Online (Sandbox Code Playgroud) java android jakarta-mail intellij-idea android-gradle-plugin
我正在观看关于属性动画的 android 开发者视频 ( https://www.youtube.com/watch?v=3UbJhmkeSig ),当时我遇到了一个很容易解决但对我来说很难理解的问题,并希望有人能发光一些为我点亮它..
我在清单中有一个针对 API 级别 8 的项目,因此当我使用下面的代码时,我收到一条错误消息,指出所使用的代码需要比当前目标 API 级别更高的 API 级别。作为一种解决方法,我在运行时检查了 Build 版本(http://developer.android.com/training/basics/supporting-devices/platforms.html),并且仅在 API 级别足够时才运行代码段。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
ObjectAnimator rotateAnimation = ObjectAnimator.ofFloat(resp1, View.ROTATION, 270);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
rotateAnimation.setRepeatCount(0);
}
}
Run Code Online (Sandbox Code Playgroud)
当我添加第一个最外层的 if 语句时,我的困惑出现了。代码行
ObjectAnimator rotateAnimation = ObjectAnimator.ofFloat(resp1, View.ROTATION, 270);
Run Code Online (Sandbox Code Playgroud)
需要 API 级别 14 因此我检查 Build.Version.ICS 的原因。但是,代码行中的“setRepeatCout()”方法
rotateAnimation.setRepeatCount(0);
Run Code Online (Sandbox Code Playgroud)
需要 API 11,虽然放在第一个最外层的 if 语句中,用括号来确保块而不是一行,但我的 IDE (IntelliJ IDEA) 仍然向我显示错误,指出代码行需要 API 11 和我的项目目标API 8. 我的两个解决方案是将代码放入两个嵌套的 if 语句中,一个检查 API 14,另一个检查 API 11 或使用
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
Run Code Online (Sandbox Code Playgroud)
方法开头的注解。但是,我不完全理解关于它如何影响旧设备的注释,也不明白为什么我需要两个 …