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

时间:2014-05-11 19:21:43

标签: java android android-asynctask sharedpreferences

我正在为我的学校项目编写一个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;
    }

}

3 个答案:

答案 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指的是我称之为的ActivityService