如何在Asynctask中获得共享偏好?

我正在为我的学校项目编写一个Android应用程序,但我被困在这里。 问题是我必须访问SharedPreferences值并在AsyncTask类中需要它。 当我尝试访问它时,由于上下文,它不会让我。 如何在AsyncTask访问我的SharedPreferences

 public class CheckAccess extends AsyncTask{ @Override protected Boolean doInBackground(JSONObject... params) { //Trying to get sharedpreferences here wont work. return null; } } 

覆盖AsyncTask onPreExecuteonPostExecute方法并获取SharedPreferences

 @Override protected void onPreExecute() { super.onPreExecute(); //get sharedPreferences here SharedPreferences sharedPreferences = getSharedPreferences(, ); } 

请注意, getSharedPreferences是一种Activity方法。 因此,如果您未在Activity使用它,则需要通过Context调用它。

您可以使用PreferenceManager在后台线程中获取SharedPreferences,如下所示:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences( .this);

您可以使用AsyncTask在后台获取SharedPreferences

错误在于这一行,你传递了错误类型的变量:

 SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 

在您的情况下,单词this指的是您正在调用的AsyncTask实例。


我所做的是将Context传递给execute()方法中的任务。 有关工作示例,请参阅下面的代码:

  new AsyncTask() { @Override protected String doInBackground(Context... params) { Context context = params[0]; SharedPreferences prefs = context.getSharedPreferences("name of shared preferences file", Context.MODE_PRIVATE); String myBackgroundPreference = prefs.getString("preference name", "default value"); return myBackgroundPreference; } protected void onPostExecute(String result) { Log.d("mobiRic", "Preference received in background: " + result); }; }.execute(this); 

在上面的示例中, this是指我称之为的ActivityService