我正在为我的学校项目编写一个Android应用程序,但我被困在这里。问题是我必须访问SharedPreferences
值并在AsyncTask
类中需要它。当我尝试访问它时,由于上下文,它不会让我。如何在我的SharedPreferences
中找到我的AsyncTask
?
public class CheckAccess extends AsyncTask<JSONObject, Integer, Boolean>{
@Override
protected Boolean doInBackground(JSONObject... params) {
//Trying to get sharedpreferences here wont work.
return null;
}
}
答案 0 :(得分:9)
覆盖onPreExecute
的{{1}}或onPostExecute
方法并获取AsyncTask
:
SharedPreferences
请注意,@Override
protected void onPreExecute() {
super.onPreExecute();
//get sharedPreferences here
SharedPreferences sharedPreferences = getSharedPreferences(<SharedPreferencesName>, <Mode>);
}
是一种getSharedPreferences
方法。因此,如果您未在Activity
中使用它,则需要通过Context
进行调用。
答案 1 :(得分:3)
您可以使用PreferenceManager在后台线程中获取SharedPreferences,如下所示:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(&lt; YourActivity&gt; .this);
答案 2 :(得分:2)
您可以使用SharedPreferences
在后台获取AsyncTask
。
错误在于这一行,你传递了错误类型的变量:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
在您的情况下,单词this
引用您正在调用的AsyncTask
实例。
我所做的是将Context
传递给execute()
方法中的任务。有关工作示例,请参阅下面的代码:
new AsyncTask<Context, Void, String>()
{
@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
。