java - 如何在android中获取getSharedPreferences?

标签 java android

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

相关文章:

用于下载文件而无需另存为的 Java Applet

android - RecyclerView 与 Paging Library 和 PositionalDataSource 保持为空

java - 任务 ':app:processDebugGoogleServices' Firebase&Android Studio 执行失败

android - Camera.open() 阻塞 UI 线程

java - ZooKeeper在集群中的作用?

java - Android - 检查单独类中的权限

Java 为输出程序设置方向

java - 方法参数中的 final 关键字

android - AsyncTask中applicationobject的调用方法

java - 从静态方法更改非静态值