0

これはSOの周りでよく聞かれていることは知っていますが、これを機能させることができないようです。状況:承認ボタンのあるEditTextを含むダイアログがあります。ユーザーが承認ボタンをタッチしたときに、SharedPreferencesを使用して文字列の値を保存したいと思います。これが私がこれまでに持っているコードです。

public void showDialog()
{
    final Dialog dialog = new Dialog(VentilationActivity.this);
    dialog.setContentView(R.layout.menu_options);       
    dialog.setTitle("Configuration de l'adresse IP");           
    dialog.setCancelable(true);     
    dialog.show();

    EditText adressIp = (EditText) dialog.findViewById(R.id.editText1);

    SharedPreferences preferences = getSharedPreferences("Agrinuvo", 0);  
    String texte = preferences.getString("VentIpKey", "");

    adressIp.setText(texte); 

    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.showSoftInput(adressIp, InputMethodManager.SHOW_IMPLICIT);

    Button btnAccept = (Button) dialog.findViewById(R.id.button1);
    btnAccept.setOnClickListener(new OnClickListener() 
    {
        @Override
        public void onClick(View v)                                                         
        {
            EditText adressIp = (EditText) dialog.findViewById(R.id.editText1); 
            textIp = adressIp.getText().toString();

            SharedPreferences preferences = getPreferences(MODE_PRIVATE); 
            SharedPreferences.Editor editor = preferences.edit();
            editor.putString("VentIpKey", textIp);
            editor.commit();

            InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(adressIp.getWindowToken(), 0);
            dialog.dismiss();                                                               
        }
    }); 
}

そして、もちろん、これは機能していません。ダイアログウィンドウを閉じて再度開くたびに、EditTextテキストは空になります。あなたが提供できるどんな助けにも感謝します。

4

4 に答える 4

1

どうですか。

public void showDialog() {
    ....
    final SharedPreferences preferences = getSharedPreferences("Agrinuvo", 0);
    ....
        @Override
        public void onClick(View v) {
            ....
            // Use previous preferences instance instead.
            // SharedPreferences preferences = getPreferences(MODE_PRIVATE); 
            SharedPreferences.Editor editor = preferences.edit();
            editor.putString("VentIpKey", textIp);
            editor.commit();
            ....
        }
    }
}

とにかく、デフォルト値を読み取る場所とは異なる設定に書き込んでいるようです。

于 2012-09-14T15:53:01.843 に答える
1

私はかなり長い間問題なくアプリケーションで設定を使用してきましたが、いくつかのことを提案します。

getSharedPreferences()は、異なるアクティビティ間で共有される設定にのみ使用する必要があります。1つのアクティビティのみがデータを使用する場合は、これを使用して保存します。

    SharedPreferences settings  = getPreferences (MODE_PRIVATE);
    SharedPreferences.Editor ed = settings.edit();

    ed.putBoolean ("BooleanKey", booleanVar);
    ed.putInt     ("IntKey", intVar);
    ed.putFloat   ("FloatKey", floatVar);
    ed.putLong    ("LongKey",  longVar);

    ed.commit();

そしてこれを取得するには:

    SharedPreferences settings = getPreferences (MODE_PRIVATE);
    longVar = settings.getLong ("longKey", 0);
    ...

Activites間で設定を共有する場合は、getSharedPreferences()を使用する必要がありますが、MODE_PRIVATEを使用しないでください。現在、私はデータを書き込むコードでMODE_WORLD_WRITEABLEを使用し、データを読み取るコードでMODE_WORLD_READABLEを使用していますが、これはおそらく最善の方法ではありません(少なくとも、Eclipseからの警告が信じられる場合)。

頑張って、
R。

于 2012-09-14T16:27:20.147 に答える
1

内部onClickObserverで、アクティビティのクラス名にちなんで名付けられたファイルのSharedPreferenceオブジェクトを作成します。少なくともこれは、アクティビティのgetPreferences(int)ドキュメントに記載されている内容です。代わりに、同じ方法でそのオブジェクトを初期化するshowDialogか、showDialog'sをpreferencesfinalにしてみてください。

于 2012-09-14T15:56:24.887 に答える
1

次の行のonclickメソッド内にエラーがあるようです

SharedPreferences preferences = getPreferences(MODE_PRIVATE);  

に変更した場合

SharedPreferences preferences = getSharedPreferences("Agrinuvo", Context.MODE_PRIVATE);  

動作するはずです。あなたがそれを呼んでいた方法では、あなたはあなたがあなたのダイアログに要求したのと同じ好みを得ていませんでした。

于 2012-09-14T15:56:30.457 に答える