2012-09-14 26 views
0

我知道這已被問了很多周圍,但我似乎無法得到這個工作。 情況:我有一個對話框,其中帶有一個接受按鈕的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文本都是空的。感謝您的任何幫助,您可以提供。

回答

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(); 
      .... 
     } 
    } 
} 

無論如何,這似乎讓你比,你看從默認值寫入不同的喜好。

+1

不要忘記做'喜好= getSharedPreferences( 「Agrinuvo」,0);'某處執行的onClick之前。 –

1

onClickObserver的內部,您爲以活動的類名稱命名的文件創建SharedPreference對象。至少這是活動的getPreferences(int)文檔所述。嘗試用showDialogshowDialogpreferences最後的方法來初始化該對象。

1

它看起來像有錯誤可能是你的onclick方法內以下行

SharedPreferences preferences = getPreferences(MODE_PRIVATE); 

如果將其更改爲

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

它應該工作。你調用它的方式,你沒有得到你請求對話的相同偏好。

+0

@ bali182感謝您的支持。我複製並粘貼了該問題,並忘記更改它。 – zabawaba99

1

我使用偏好我的應用程序沒有太多的問題相當長的一段時間,我建議兩件事情:

getSharedPreferences()應只用於不同活動之間的共享偏好。如果只有你一個活動將要使用的數據,用它來保存:

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.