gpt4 book ai didi

java - 如何在android中获取getSharedPreferences?

转载 作者:行者123 更新时间:2023-11-30 02:21:46 25 4
gpt4 key购买 nike

我有两个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com