2016-08-24 52 views
-1

我有一個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) 

我有點困惑,爲什麼某些行,同時一個之前,它是不是,爲什麼應用程序被保存到任何共享偏好墜毀前正在執行。任何幫助表示讚賞。

+0

作爲日誌'sharedPreferences'爲空 –

+0

你在哪裏創建和初始化'sharedPreferences',你能否顯示 –

+0

在使用之前初始化sharedPreferences – SANAT

回答

1
if (!inputGuardian1.getText().toString().matches("")){ 
      Log.i("Putting text", "in sp"); 
      if(sharedPreferences != null){ 
      sharedPreferences.edit().putString("Guardian 1", guardian1).apply(); 
      Log.i("Putting text", "passed"); 
      }else{ 
      sharedPreferences = mContext.getSharedPreferences(PREF_NAME, PRIVATE_MODE); 
      sharedPreferences.edit().putString("Guardian 1", guardian1).apply(); 
      } 
     } 
0

因爲你必須做sharedPreferences這樣的:

SharedPreferences sharedPref = getSharedPreferences(
       getString(R.string.preference_file_key), Context.MODE_PRIVATE); 
SharedPreferences.Editor editor = sharedPref.edit(); 

然後editor.putString( ...

然後editor.apply()

0

SharedPreferences對象沒有初始化,所以請初始化它,如

如果您在活動做然後做這樣的

SharedPreferences.Editor editor = getSharedPreferences("YouKeyName", MODE_PRIVATE).edit(); 

editor.putString("Guardian 1", "Hi"); 
editor.commit(); 

如果你正在做的片段然後做這樣的

SharedPreferences.Editor editor = getActivity().getSharedPreferences("UserInfo", getActivity().MODE_PRIVATE).edit(); 

editor.putString("Guardian 1", "Hi"); 
editor.commit(); 
0
SharedPreferences sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);   
sharedpreferences.edit().putString("key", "value").commit();