2016-07-18 87 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