您好我正在使用共享首选项保存我的数据。在我的项目中,活动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);
答案 0 :(得分:0)
因为你在asynctask中使用了context,所以它指的是asynctask而不是activity。你必须在asyntask中传递上下文:
youractivityname.this ;