我有一個EditText,並且我想將EditText中的文本保存爲共享首選項中的字符串(如果該字符串不爲空或爲空)。但是我的應用程序崩潰與下面的代碼:EditText中的文本未保存在共享首選項中
Activity.java:
Button buttonNext = (Button) findViewById(R.id.buttonNext);
assert buttonNext != null;
buttonNext.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
if (checkForGuardianNames()) {
Log.i("Guardian names: ", "check passed");
Log.i("ActivityEditText", inputGuardian1.getText().toString());
Toast toast = Toast.makeText(UserInfoActivity.this, inputGuardian1.getText().toString(), Toast.LENGTH_LONG);
toast.show();
saveGuardianNames();
} else {
promptToFillField("Guardian");
Log.i("Guardian names: ", "check failed");
// Toast toast = Toast.makeText(UserInfoActivity.this, "Works well part 2 "+ inputGuardian1.getText().toString(), Toast.LENGTH_LONG);
// toast.show();
}
}
現在我知道checkForGuardianNames()
通行證,但在調用saveGuardianNames()
方法的應用程序崩潰。
我saveGuardianNames()
:
private void saveGuardianNames(){
String guardian1 = inputGuardian1.getText().toString();
String guardian2 = inputGuardian2.getText().toString();
String guardian3 = inputGuardian3.getText().toString();
String guardian4 = inputGuardian4.getText().toString();
Log.i("Value: ", "Dummy");
Log.i("saveGuardianNames", "Called");
if (!inputGuardian1.getText().toString().matches("")){
Log.i("Putting text", "in sp");
sharedPreferences.edit().putString("Guardian 1", guardian1).apply();
Log.i("Putting text", "passed");
}
}
現在我看到saveGuardianNames: check passed
在logcat中這樣的方法是否正確調用,但該行的正上方,是不是(Log.i("Value: ", "Dummy");
)並沒有它的任何提及在logcat的。另外,據我所知,在執行Log.i("Putting text", "in sp");
之前,if語句不會被調用或崩潰。
我的錯誤的logcat:
08-24 01:40:43.712 1497-1497/com.bluefirelabs.apptiva I/Guardian names:: check passed
08-24 01:40:43.732 1497-1497/com.bluefirelabs.apptiva I/saveGuardianNames: Called
08-24 01:40:43.732 1497-1497/com.bluefirelabs.apptiva E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.bluefirelabs.apptiva, PID: 1497
java.lang.NullPointerException: Attempt to invoke interface method 'android.content.SharedPreferences$Editor android.content.SharedPreferences.edit()' on a null object reference
at com.bluefirelabs.apptiva.UserInfoActivity$override.saveGuardianNames(UserInfoActivity.java:374)
at com.bluefirelabs.apptiva.UserInfoActivity$override.static$access$200(UserInfoActivity.java:27)
at com.bluefirelabs.apptiva.UserInfoActivity$override.access$dispatch(UserInfoActivity.java)
at com.bluefirelabs.apptiva.UserInfoActivity.access$200(UserInfoActivity.java:0)
at com.bluefirelabs.apptiva.UserInfoActivity$1$override.onClick(UserInfoActivity.java:112)
at com.bluefirelabs.apptiva.UserInfoActivity$1$override.access$dispatch(UserInfoActivity.java)
at com.bluefirelabs.apptiva.UserInfoActivity$1.onClick(UserInfoActivity.java:0)
at android.view.View.performClick(View.java:5702)
at android.widget.TextView.performClick(TextView.java:10885)
at android.view.View$PerformClick.run(View.java:22533)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7229)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
我有點困惑,爲什麼某些行,同時一個之前,它是不是,爲什麼應用程序被保存到任何共享偏好墜毀前正在執行。任何幫助表示讚賞。
作爲日誌'sharedPreferences'爲空 –
你在哪裏創建和初始化'sharedPreferences',你能否顯示 –
在使用之前初始化sharedPreferences – SANAT