java - Android 上下文和共享首选项

标签 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

最佳答案

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

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

更好的实现方法是在 oncreate 中初始化您的共享首选项,因为您可以在任何地方使用它。

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

关于java - Android 上下文和共享首选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29790930/

相关文章:

java - 将 ArrayList 转换为字符串以存储在共享首选项中

android - SharedPreferences在android程序中产生强制关闭

java - 无法让我的数组在 0 处取消

java - 我们可以访问java包外默认类中定义的公共(public)方法吗?

android - 如何将 Android 应用程序保护到设备?

android - 由于违反安全策略,WebView 不加载 iFrame 视频

android - Activity 关闭时共享首选项数据未清除

macos - Heroku 需要 OpenJDK 版本 6 用于 Playframework - 有适用于 Mac os Lion 的 OpenJDK 6 吗?

java - 如何在多个实体中使用通用实体

java - setMaxDate 值不能设置为 18 年前