尝试使用Asynctask将从服务器获取的值存储到sharedpreferences时的RuntimeException

时间:2016-02-03 09:52:44

标签: java android android-asynctask sharedpreferences

我正在使用共享偏好来检查应用程序是否第一次使用。如果应用程序首次使用注册屏幕将显示,之后MainActivity将显示注册是否成功完成或稍后使用。首次运行应用程序时会显示注册屏幕,但注册时会出现问题。从MainActivity调用共享首选项以在其中插入值。问题是RuntimeException。这就是我正在为此做的......

这是我的MainActivity.java

 SharedPreferences sp;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    firtst_time_check();
    setContentView(R.layout.available_items);.....}

这是first_time_check()

private boolean firtst_time_check(){
    sp = PreferenceManager.getDefaultSharedPreferences(this);
    String first = sp.getString("first", null);
    if (first == null){
        Intent i = new Intent(getBaseContext(), MainActivity.class);
        startActivity(i);
    }
    return false;
}

这是来自注册屏幕的代码,其中异常放在此行MainActivity set = new MainActivity();

JSONArray a = o.optJSONArray("status");
JSONObject obj = a.optJSONObject(0);
String uid = obj.optString("RegistrationID");
MainActivity set = new MainActivity();
set.sp = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
String value = set.sp.getString("RegistrationID", uid);
SharedPreferences.Editor editor = set.sp.edit();
editor.putString("first", value);
editor.commit();

这是在logcat中显示的内容

lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

1 个答案:

答案 0 :(得分:1)

不,需要使用sp中的MainActivity 创建活动对象,以便在SharedPreferences Registration screen中保存价值,因为{{1}还返回PreferenceManager.getDefaultSharedPreferences实例,我们可以将其用于保存和键值。变化:

SharedPreferences

MainActivity set = new MainActivity();
set.sp = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());