我正在使用共享偏好来检查应用程序是否第一次使用。如果应用程序首次使用注册屏幕将显示,之后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()
答案 0 :(得分:1)
不,需要使用sp
中的MainActivity
创建活动对象,以便在SharedPreferences
Registration screen
中保存价值,因为{{1}还返回PreferenceManager.getDefaultSharedPreferences
实例,我们可以将其用于保存和键值。变化:
SharedPreferences
到
MainActivity set = new MainActivity();
set.sp = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());