如何在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
onPreExecute
或onPostExecute
方法并获取SharedPreferences
:
@Override protected void onPreExecute() { super.onPreExecute(); //get sharedPreferences here SharedPreferences sharedPreferences = getSharedPreferences(, ); }
请注意, getSharedPreferences
是一种Activity
方法。 因此,如果您未在Activity
使用它,则需要通过Context
调用它。
您可以使用PreferenceManager在后台线程中获取SharedPreferences,如下所示:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(
您可以使用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
是指我称之为的Activity
或Service
。