共享首选项保存和检索数据

时间:2014-07-25 13:35:37

标签: java android save android-sharedpreferences

我正在使用“共享首选项”来保存AutoCompleteTextView中的数据。 当用户在此AutoCompleteTextView中写入内容时,他可以单击一个按钮以保存他刚才写的内容(这样他就不必每次都写它)。

以下是我的代码:

private AutoCompleteTextView autoComplete = null;
String nameFile = "Web service data";
String myData = "";
SharedPreferences pref;
Editor editor;
String channel = "";
String[] valuesArray = {channel};

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fragment_main);

    pref = getApplicationContext().getSharedPreferences("MyPref", 0); 
    editor = pref.edit();

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, valuesArray);
    autoComplete = (AutoCompleteTextView) findViewById(R.id.autocompletion);
    autoComplete.setAdapter(adapter);

    Button add = (Button) findViewById(R.id.add); 
    add.setOnClickListener(sendForm2);
    Button remove = (Button) findViewById(R.id.remove);
    remove.setOnClickListener(sendForm2);

    channel = pref.getString(nameFile, null);
}


OnClickListener sendForm2 = new OnClickListener() {
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.add:
                myData = autoComplete.getText().toString();
                editor.putString(nameFile, myData);
                editor.commit();
            break;

            case R.id.remove:
                editor.remove(nameFile);
                editor.commit();
            break;   
        }
    }   
};

问题是,共享首选项根本不会保存通道中的任何数据。即使我关闭应用程序并重新启动它。 任何线索或想法如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

我要尝试的第一件事就是添加

Log.d("OnCreate", "channel : "+ channel);

中的onCreate

channel = pref.getString(nameFile, null);

看看你里面是否有东西。

如果不这样做,这实际上意味着不保存sharedpref。

在这种情况下,我会尝试带回:

pref = getApplicationContext().getSharedPreferences("MyPref", 0); 
editor = pref.edit();

之前的

switch (v.getId()) {

我记得有时候根据您对活动的处理情况,您创建的sharedpref编辑器可能会“丢失”,并且与代码中的任何内容无关。

答案 1 :(得分:0)

使用以下方法保存和检索String首选项。

//通过传递密钥和数据来保存首选项

public static void SavePrefrence(Context ctx, String Key, String value) {
    ctx.getSharedPreferences("mypref", ctx.MODE_PRIVATE)
            .edit().putString(Key, value).commit();
}

//通过传递你的密钥

来获得优惠
public static String getPrefrence(Context ctx, String key) {
        SharedPreferences pref = ctx.getSharedPreferences(
                "mypref", ctx.MODE_PRIVATE);
        String result = pref.getString(key, null);
        return result;
    }