共享偏好是错误的背景

时间:2014-02-18 06:56:50

标签: android nullpointerexception sharedpreferences

您好我正在使用共享首选项保存我的数据。在我的项目中,活动1中有2个活动我在 asynctask 内的shared preference中保存数据>> doinBackground method.In异步任务我从服务器下载多个文件。当我的第一个文件下载开始,我正在更改活动现在我的Activity-1在后台和我的Activity-2在foreground.My文件在后台下载我的sharedpreference也在这个时间调用SharedePreference返回空上下文并且它给出了nullpointer异常。

如果Activity-1在前台我没有得到nullpointer异常。 如果任何其他活动出现在前景中,为什么它会返回空上下文?

我的logcat:

02-18 06:45:55.503: W/System.err(1242): java.lang.NullPointerException
02-18 06:45:55.503: W/System.err(1242):     at info.helper.MyPreferences.savePreferences(MyPreferences.java:17)
02-18 06:45:55.503: W/System.err(1242):     at info.activity.DownloadActivity$DownloadFileFromURL.doInBackground(DownloadActivity.java:820)
02-18 06:45:55.503: W/System.err(1242):     at info.activity.DownloadActivity$DownloadFileFromURL.doInBackground(DownloadActivity.java:1)
02-18 06:45:55.503: W/System.err(1242):     at android.os.AsyncTask$2.call(AsyncTask.java:287)
02-18 06:45:55.503: W/System.err(1242):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
02-18 06:45:55.503: W/System.err(1242):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
02-18 06:45:55.503: W/System.err(1242):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
02-18 06:45:55.503: W/System.err(1242):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
02-18 06:45:55.503: W/System.err(1242):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
02-18 06:45:55.503: W/System.err(1242):     at java.lang.Thread.run(Thread.java:856)
02-18 06:45:55.503: W/dalvikvm(1242): threadid=24: thread exiting with uncaught exception (group=0xa62b6288)

编辑#1

保存应用程序数据的常用方法:

public static void savePreferences(Context context, String key, String value) {
    SharedPreferences sharedPreferences = context.getSharedPreferences(
            MY_ST_PREFS, Context.MODE_PRIVATE);
    Editor editor = sharedPreferences.edit();
    editor.putString(key, value);
    editor.commit();
}

将数据保存在AsyncTask中,如下所示:

 MyPreferences.savePreferences(DownloadActivity.this.getActivity(),
                        "downloading_storyid", downloadingStoryId);

1 个答案:

答案 0 :(得分:0)

因为你在asynctask中使用了context,所以它指的是asynctask而不是activity。你必须在asyntask中传递上下文:

youractivityname.this ;