我正在尝试获取上下文来运行异步共享首选项。试图获取上下文:
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
最佳答案
在 asynctask 中使用共享首选项时,您应该在 onPreExecute 方法中将所有数据从共享首选项获取到本地变量,在 doInBackground 中使用它们,如果需要更新这些值,请在 onPostExecute 中执行。
如果您在同一个类中使用 asynctask,则无需在任何地方显式声明上下文。你可以只写Classname.this。
更好的实现方法是在 oncreate 中初始化您的共享首选项,因为您可以在任何地方使用它。
如果您在不同的类中编写 asynctask,那么您可以编写一个接受上下文并调用 asynctask 来执行的函数。
关于java - Android 上下文和共享首选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29790930/