android上下文和共享偏好

时间:2015-04-22 07:44:34

标签: java android sharedpreferences android-preferences

我正在尝试获取上下文以运行异步共享首选项。试图获得上下文:

public class MainActivity2 extends Activity implements OnClickListener {
    public MainActivity2(final Context context) {
        this.context = context;
    }
    private Context context;

    //....rest of class.....
}

但该应用程序在包含它时会崩溃。但需要这样的东西才能获得共享的偏好:

class CreateUser extends AsyncTask<String, String, String> {
    // .....rest of ....
    @Override
    protected String doInBackground(String... args) {
        SharedPreferences prefs =   android.preference.PreferenceManager.getDefaultSharedPreferences(context);
        String myIntegerValue = prefs.getString("ok", "f");
        android.util.Log.d("your_tag", "myint: " + myIntegerValue);
    }
    //rest of.....
}

试图获得这样的共享偏好不起作用:

SharedPreferences prefs = android.preference.PreferenceManager.getDefaultSharedPreferences(getactivity());

试图获得这样的共享偏好不起作用:

SharedPreferences prefs = android.preference.PreferenceManager.getDefaultSharedPreferences(this);
使用此

时,

getDefaultSharedPreferences无法应用于MainActivity2.CreateUser

4 个答案:

答案 0 :(得分:1)

在asynctask中使用共享首选项时,你应该在onPreExecute方法中将所有数据从sharedpref获取到你的本地变量,在doInBackground中使用它们,如果需要更新这些值,请在onPostExecute中执行。

如果您在同一个类中使用asynctask,则无需在任何地方显式声明上下文。你可以写出Classname.this。

实现它的更好方法是在oncreate中初始化你的sharedprefs,因为你可以在任何地方使用它。

如果你在不同的类中编写aynctask,那么你可以编写一个接受上下文的函数,并调用asynctask来执行。

答案 1 :(得分:0)

  

但该应用程序在包含它时会崩溃。但需要类似的东西   要获得共享偏好:

Activity延伸ContextWrapper。您不需要(也不能拥有)将上下文作为参数的构造函数。您在活动中的上下文是关键字this。如果您在片段中需要它,则可以使用getActivity()来检索托管Fragment的活动的上下文。

编辑:

在你的情况下,你必须有可能。您添加了一个将Context带到AsyncTask的构造函数,或者您读取了Activity中的值并将其传递给AsyncTask。我建议你采用第二种方法

答案 2 :(得分:0)

试试这个:

SharedPreferences prefs = android.preference.PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext());

SharedPreferences prefs = android.preference.PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

答案 3 :(得分:0)

只需将您的活动用作上下文MainActivity.this 应该做的伎俩

相关问题