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
应该可以解决问题
我正在尝试获取 运行 异步共享首选项的上下文。尝试获取上下文:
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.CreateUserBut the app crashes when that it is included. But need something like that to get to sharedpreferences:
Activity
扩展 ContextWrapper
。您不需要(也不能拥有)以上下文作为参数的构造函数。 activity 中的上下文是关键字 this
。如果您在片段中需要它,您可以使用 getActivity()
检索托管 Fragment
.
编辑:
在你的情况下,你必须有多种可能性。您添加一个将 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 应该可以解决问题