所以我有一些代码想要保存我在字段中输入的内容,因此当我启动应用程序时,它具有之前的数字( double ),并且当它第一次启动时,它具有我尝试过的默认值 1但现在我的应用程序崩溃了,我在过去的 3 个小时里尝试了这里的代码是将 Double 转换为字符串和字符串转换为 Double,我知道这不是正确的方法,但我不明白这里的正确方法是代码
package me.danilkp1234.laerkeholtmilk;
import android.content.Context;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.inputmethod.EditorInfo;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;
import com.google.firebase.crash.FirebaseCrash;
import static me.danilkp1234.laerkeholtmilk.R.id.brix;
import static me.danilkp1234.laerkeholtmilk.R.id.textView;
import static me.danilkp1234.laerkeholtmilk.R.id.textView3;
public class MainActivity extends AppCompatActivity {
private EditText milkdone;
private EditText brixdone;
private double milkdone2;
private double brixdone2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
milkdone = (EditText) findViewById(R.id.milkliter);
brixdone = (EditText) findViewById(R.id.brix);
milkdone.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
boolean handled = false;
if (actionId == EditorInfo.IME_ACTION_DONE) {
milkdone2 = Double.parseDouble(milkdone.getText().toString());
brixdone2 = Double.parseDouble(brixdone.getText().toString());
double test2 = brixdone2 + milkdone2;
TextView change = (TextView) findViewById(R.id.textView3);
change.setText(String.valueOf(test2));
handled = true;
}
return handled;
}
});
brixdone.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
boolean handled = false;
if (actionId == EditorInfo.IME_ACTION_DONE){
SharedPreferences prefs = getSharedPreferences("SavedTotals",Context.MODE_PRIVATE);
milkdone2 = Double.parseDouble(prefs.getString("BrixDone2Saved",String.valueOf(milkdone)));
brixdone2 = Double.parseDouble(prefs.getString("MilkDone2Saved",String.valueOf(milkdone)));
double test2 = brixdone2 + milkdone2;
TextView change = (TextView) findViewById(R.id.textView3);
change.setText(String.valueOf(brixdone2));
handled = true;
}
return handled;
}
});
};
public void onStop() {
super.onStop();
storeDouble("MilkDone2Saved",milkdone);
storeDouble("BrixDone2Saved",brixdone);
}
public void storeDouble(String d, EditText c){
SharedPreferences prefs = getSharedPreferences("SavedTotals",Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putString(d,String.valueOf(c.getText().toString()));
editor.apply();
}
public void GetDouble(){
SharedPreferences prefs = getSharedPreferences("SavedTotals",Context.MODE_PRIVATE);
}
}
最佳答案
您可以首先检查来自共享首选项的字符串值是否为 float 格式,然后您可以将它们转换。
String MilkDone2Saved=(prefs.getString("MilkDone2Saved",String.valueOf(milkdone));
if(!TextUtils.isEmpty(MilkDone2Saved)){
milkdone2 = Double.parseDouble(MilkDOne2Saved);
}
希望这会有所帮助:),顺便请下次选择更好的变量名称。
关于java - Android Studio SharedPreferences 出现双重崩溃和默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48724550/