2016-07-18 84 views
1

我正在嘗試爲我自己的應用程序創建一個應用程序,並試圖將3個editText框保存到Sharedpref,這樣我就可以在應用程序中使用這些值來計算事情了。SharedPreferences來保存editText

下面的代碼:

SharedPreferences mSharedPreferences; 
private EditText mEditTextBench; 
private EditText mEditTextSquat; 
private EditText mEditTextDead; 
private Button mButton; 
public String maxDead = mSharedPreferences.getString("maxDead", "DEFAULT"); 

然後在onCreate方法我:

mSharedPreferences= PreferenceManager.getDefaultSharedPreferences(this.getBaseContext()); 
    mButton = (Button) findViewById(R.id.button); 
    mEditTextBench = (EditText) findViewById(R.id.editTextBench); 
    mEditTextSquat = (EditText) findViewById(R.id.editTextSquat); 
    mEditTextDead = (EditText) findViewById(R.id.editTextDead); 

和onclicklistener我的按鈕:

mButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      SharedPreferences.Editor editor = mSharedPreferences.edit(); 
      editor.putString("maxDead", mEditTextDead.getText().toString()); 
      editor.commit(); 

如果我把公共字符串maxDead爲在onCreate方法中的最後一個字符串,它的工作原理,但我希望能夠在未來改變字符串,使用editText。我認爲我不能把它當作決賽。

方式的代碼是現在,我得到這個錯誤:

Attempt to invoke interface method 'java.lang.String android.content.SharedPreferences.getString(java.lang.String, java.lang.String)' on a null object reference

+0

此行 公共字符串maxDead = mSharedPreferences.getString(「maxDead」,「DEFAULT」);應該在下面: mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this.getBaseContext()); –

+0

你在寫'public String maxDead = mSharedPreferences.getStr (「maxDead」,「DEFAULT」);'外部onCreate? –

+0

@GyanendraMani當我嘗試把該行字符串maxDead = mSharedPref .....我得到一個錯誤說變量maxDead從內部類訪問,必須宣佈最後 – LBJ33

回答

1

你的代碼應該是這樣的。

SharedPreferences mSharedPreferences; 
private EditText mEditTextBench; 
private EditText mEditTextSquat; 
private EditText mEditTextDead; 
private Button mButton; 
public String maxDead; 

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

    mSharedPreferences= PreferenceManager.getDefaultSharedPreferences(this.getBaseContext()); 
    maxDead = mSharedPreferences.getString("maxDead", "DEFAULT"); 

    mButton = (Button) findViewById(R.id.button); 
    mEditTextBench = (EditText) findViewById(R.id.editTextBench); 
    mEditTextSquat = (EditText) findViewById(R.id.editTextSquat); 
    mEditTextDead = (EditText) findViewById(R.id.editTextDead); 

    mButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      SharedPreferences.Editor editor = mSharedPreferences.edit(); 
      editor.putString("maxDead", mEditTextDead.getText().toString()); 
      editor.commit(); 
     } 
    }); 
} 

編輯:我在這裏顯示使用SharedPreference

SharedPreferences myPreference; 
String MY_PREFERENCE = "my_preference"; 

裏面的onCreate我的方式初始化SharedPreference

myPreference = getSharedPreferences(MY_PREFERENCE, Context.MODE_PRIVATE); 

爲獲得價值

String data = myPreference.getString("maxDead", "") 

編輯SharedPreference

SharedPreferences.Editor editor = myPreference.edit(); 
editor.putString("maxDead", mEditTextDead.getText().toString()); 
editor.commit(); 

我希望這將有助於。

+0

謝謝!其實我仍然在嘗試運行程序時出現錯誤嘗試調用接口方法'java.lang.String android.content.SharedPreferences.getString(java.lang.String,java.lang.String)'null對象引用 – LBJ33

+0

它是什麼錯誤? –

+0

java.lang.NullPointerException:嘗試調用空對象引用 – LBJ33

0

你得到的錯誤,因爲這樣:

public String maxDead = mSharedPreferences.getString("maxDead", "DEFAULT"); 

因爲你沒有初始化mSharedPreferences那麼,它的投擲NullPointerException

更改爲:

public String maxDead; 

然後初始化maxDeadonCreate方法初始化mSharedPreferences後:

maxDead = mSharedPreferences.getString("maxDead", "DEFAULT"); 

UPDATE

你沒有得到更新值在onClickListener內的maxDead作爲在onCreate中變量maxData的值僅設置一次。所以當maxData的值在SharedPreferences中更新時,變量不會更新。所以,與其保持一個變量,你應該使用的方法類似這樣從SharedPreference得到的最新值:

private String getMaxDead(){ 
    if(mSharedPreferences == null) 
     mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this.getBaseContext()); 
    return mSharedPreferences.getString("maxDead", "DEFAULT"); 
} 

所以使用方法:在你的麪包getMaxDead(),它會工作。

+0

謝謝!其實我仍然在嘗試運行程序時出現錯誤嘗試調用接口方法'java.lang.String android.content.SharedPreferences.getString(java.lang.String,java.lang.String)'null對象引用 – LBJ33

+0

你能分享完整的堆棧跟蹤嗎? –

+0

得到它的工作!犯了一個愚蠢的錯誤..謝謝!還有一個問題,我給吐司留言顯示更新的值是什麼,但是當我點擊我的按鈕時,它第一次起作用,但是如果我改變這個值並再次點擊按鈕,它仍然顯示前一個數字,除非我走出這個佈局,然後回到它。這是有原因的嗎?謝謝! – LBJ33

0

我對Android也很新,但我會盡力回答。你得到例外的原因是因爲當創建活動時,String maxDead中沒有任何內容,因爲它在頂部被指定爲private String maxDead。當你點擊你的按鈕時,你只給它分配一個值。你想在哪裏使用這個值?我還不能評論,這就是爲什麼我寫這個答案。 :(

這是我如何使用SharedPreferences一個例子:

SharedPreferences spref = getSharedPreferences("MY_PREFS", Context.MODE_PRIVATE); 
SharedPreferences.Editor editor = spref.edit(); 
editor.putString("maxDead", mEditTextDead.getText().toString()); 
editor.apply; 

然後某處(另一個活動/片段),你需要的值:

String maxDead = spref.getString("maxDead", ""); 
+0

謝謝,什麼是雙引號在spref.getString(「maxDead,」「);做?我試圖設置一個初始值通過更改公共字符串maxDead =「100」;公共字符串maxDead的未讀,但仍然得到錯誤,我需要在另一個佈局文件中的值 – LBJ33

+0

得到它的工作,犯了一個愚蠢的錯誤,忘記刪除一些舊的代碼。確實沒有在開始的時候給maxDead設置一個值!:) – LBJ33

+0

好吧,很高興聽到它! – jlively