0

共有設定を使用して 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;   
        }
    }   
};

問題は、共有設定がチャネルにデータをまったく保存しないことです。アプリケーションを閉じて再起動しても。この問題を解決する手がかりやアイデアはありますか?

4

2 に答える 2

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 エディターが「失われ」、コードの後半に関連しなくなる場合があることを読んだことを覚えています。

于 2014-07-25T14:08:03.630 に答える
0

次のメソッドを使用して、文字列設定を保存および取得します。

//キーとデータを渡して設定を保存する

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;
    }
于 2014-07-25T14:46:58.520 に答える