android 上下文和共享首选项

android context and sharedpreferences

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

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

But the app crashes when that it is included. But need something like that to get to sharedpreferences:

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

的 activity 的上下文

编辑:

在你的情况下,你必须有多种可能性。您添加一个将 Context 带入 AsyncTask 的构造函数,或者您读取 Activity 中的值并将其传递给 AsyncTask。我会推荐你​​第二种方法

试试这个:

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

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

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

如果您在同一 class 中使用异步任务,则无需在任何地方显式声明上下文。你可以只写 Classname.this.

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

如果您在不同的环境中编写 ynctask class,那么您可以编写一个接受上下文并调用 asynctask 来执行的函数。

只需使用您的 Activity 作为上下文 MainActivity.this 应该可以解决问题