2012-09-14 3 views
0

저는이 문제에 대해 많은 질문을 받았지만이 문제를 해결할 수없는 것으로 알고 있습니다. 상황 : 수락 버튼이있는 EditText가있는 대화 상자가 있습니다. 사용자가 accept 버튼을 누를 때 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)을 수행하는 것을 잊지 마세요. –

1

onClickObserver 안에 활동의 클래스 이름 뒤에 명명 된 파일의 SharedPreference 객체를 만듭니다. 적어도 이것은 Activity의 getPreferences(int) 문서에 나와 있습니다. 대신 해당 객체를 showDialog에서 수행하거나 showDialogpreferences 최종본에서와 동일한 방법으로 초기화하십시오. 당신이이 일을해야

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

로 변경하는 경우이 오류가 다음 줄

SharedPreferences preferences = getPreferences(MODE_PRIVATE); 

에 온 클릭 방식의 내부에 수 있습니다처럼

1

는 것 같습니다. 당신이 그것을 부르는 방식으로, 당신은 당신이 당신의 대화를 요구하는 것과 동일한 선호도를 얻지 못했습니다.

+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); 
    ... 

당신은 활?을 통해 환경 설정을 공유 위하여려고하는 경우에, 그 때 당신의 getSharedPreferences()를 사용하고 싶지만 사용자 MODE_PRIVATE가 아니길 원할 것입니다. 현재, 나는 MODE_WORLD_WRITEABLE을 데이터를 쓰는 코드에서 사용하고 MODE_WORLD_READABLE을 읽었을 때, 아마도 가장 좋은 방법은 아니었다 (적어도 Eclipse에서 얻은 경고가 믿어지면). `의 onclick이 실행됩니다 어딘가에 전에,

행운을 빌어 요,
R.

관련 문제