无法使用共享首选项保存字符串

时间:2014-06-10 09:00:27

标签: android sharedpreferences

我有两个字符串要保存它们我编写了如下所示的代码

public class MainActivity extends Activity {
    Button result;
    EditText b951, b9511, sum95, t95, p95

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        LoadPreferences();
        result = (Button)findViewById(R.id.btn1);
        b951 = (EditText)findViewById(R.id.b951);
        b9511 = (EditText)findViewById(R.id.b9511);
        sum95 = (EditText)findViewById(R.id.sum95);
        p95 = (EditText)findViewById(R.id.p95);
        t95 = (EditText)findViewById(R.id.t95);     
    }

    public void close (View v){
        SavePreferences("p2b951", b951.getText().toString());
        SavePreferences("p2b9511", b9511.getText().toString());

        finish();
    }

    private void SavePreferences(String key, String value){
        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putString(key, value);
        editor.commit();
    }

    private void LoadPreferences(){
        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
        String p1b951 = sharedPreferences.getString("p2b951", "1");
        String p1b9511 = sharedPreferences.getString("p2b9511", "1");

        b951.setText(p1b951);
        b9511.setText(p1b9511);
    }


    public void result (View v) {   
        try {       
            int ib951 = Integer.parseInt(b951.getText().toString());                
            int ib9511 = Integer.parseInt(b9511.getText().toString());          

            int iisum95 = (ib9511-ib951);
            sum95.setText(String.valueOf(iisum95));

            int isum95 = Integer.parseInt(sum95.getText().toString());

            int ip95 = Integer.parseInt(p95.getText().toString());

            int pp95 = (isum95*ip95);
            t95.setText(String.valueOf(pp95));
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
}

但似乎这两行存在问题:

b951.setText(p1b951);
b9511.setText(p1b9511);

我试过这个

b951.setText(String.valueOf.p1b951);
b9511.setText(String.valueOf.p1b9511);

问题仍然存在

当我打开应用程序并调用loadpreferences时,应用程序将强行关闭

logcat向我显示错误是用这两行确定它只是第一行因为他没有得到第二行但是它们是相同的所以它们是错误的错误

任何帮助??

2 个答案:

答案 0 :(得分:0)

更改onCreate(),如下所示:

@Override
public void onCreate(Bundle savedInstanceState)
{

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    result = (Button)findViewById(R.id.btn1);
    b951 = (EditText)findViewById(R.id.b951);
    b9511 = (EditText)findViewById(R.id.b9511);
    sum95 = (EditText)findViewById(R.id.sum95);
    p95 = (EditText)findViewById(R.id.p95);
    t95 = (EditText)findViewById(R.id.t95);   
    LoadPreferences();  
}

这是因为你在LoadPreferences()中使用EditTexts而没有在EditTexts上调用findViewById()。

答案 1 :(得分:0)

您可以关注并提供类似代码的帮助。比如

在首选项中设置值:

SharedPreferences.Editor editor = getSharedPreferences(MODE_PRIVATE).edit();
 editor.putString("name", "Elena");
 editor.putInt("idName", 12);
 editor.commit();

从偏好中检索数据:

SharedPreferences prefs = getSharedPreferences(MODE_PRIVATE); 
String restoredText = prefs.getString("text", null);
if (restoredText != null) {
  String name = prefs.getString("name", "No name defined");//"No name defined" is the default value.
  int idName = prefs.getInt("idName", 0); //0 is the default value.
}

对此有任何疑惑,请遵循此link