作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个 Activity (MainActivity 和 Player)。在 MainActivity 中,我创建了两种方法:
private final long DEFAULTLONG = 0;
public long getTotalPlayTime(){
SharedPreferences sp = getApplicationContext().getSharedPreferences("TotalPlaybackTime", MODE_PRIVATE);
long tempTotalTime = sp.getLong("totalPlayTime", DEFAULTLONG);
return tempTotalTime;
}
public void updateTotalPlayTime(){
SharedPreferences sp = getSharedPreferences("TotalPlaybackTime", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putLong("totalPlayTime", totalPlayTime);
editor.commit();
}
当我从 Player Activity 调用这两个方法时,我的应用程序崩溃了。我已经在 Player 中实例化了 MainActivity 并通过这一行调用了这些方法:
if (preferenceScheduler++ == 10) {
f.updateTotalPlayTime();
seconds2 = (f.getTotalPlayTime()) % 60;
minutes2 = ((f.getTotalPlayTime() - seconds2)) / 60;
}
我不知道为什么,它给了我 NullPointerException。
完整的错误日志如下:
java.lang.NullPointerException
at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:161)
at tushar.prime.primeplayer.MainActivity.updateTotalPlayTime(MainActivity.java:329)
at tushar.prime.primeplayer.player.update(player.java:506)
at tushar.prime.primeplayer.player.access$000(player.java:40)
at tushar.prime.primeplayer.player$1.run(player.java:133)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:153)
at android.app.ActivityThread.main(ActivityThread.java:5297)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)
最佳答案
getSharedPreferences()
只能在 onCreate()
被 Activity
调用后调用。
我会将您的 updateTotalPlaytime()
方法更改为
public void updateTotalPlayTime(Context ctx, String value){
SharedPreferences sp = ctx.getSharedPreferences("TotalPlaybackTime", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putLong("totalPlayTime", value);
editor.commit();
}
然后在你的 Activity
中这样调用它(在 onCreate 之后);
updateTotalPlaytimg(this, "value");
编辑:
您不应实例化您的 MainActivity
。相反,在您的 PlayerActivity
中创建 updateTotalPlaytime();
方法。
关于java - 如何在android中获取getSharedPreferences?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28410020/
我是一名优秀的程序员,十分优秀!