我正在尝试获取上下文以运行异步共享首选项。试图获得上下文:
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
答案 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 应该做的伎俩