2011-09-21 7 views
0

앱을 강제 종료 한 후에 이상한 결과가 나타납니다. 앱이 finish()로 닫히면 모든 것이 정상입니다. 일부 변수는 sharedPreferences에 저장되어 있으므로 앱을 다시로드 할 때 해당 변수를 UI에 복원 할 수 있습니다. 그러나 앱을 강제 종료 한 다음 중단 한 부분에서 계속하려고하면 일부 변수가 "재미있는 행동"을 시작합니다.Android : 강제 종료 후 SharedPreference 오류

String namec; 
private static final String TAG = "MyActivity"; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    //namec was set as "forest" in a previous activity 
    //which is bypassed if the user selects continue 
    //from the main menu 
    SharedPreferences pathtaken = getSharedPreferences("pathtakenpref", MODE_WORLD_READABLE); 
    namec = pathtaken.getString("namec", "Unknown"); 

    ImageView v1 = (ImageView) findViewById(R.id.pathpic1); 
    RelativeLayout v2 = (RelativeLayout) findViewById(R.id.pathmain); 

    Log.i(TAG, "namec= " + namec); 
    if(namec == "forest"){ 
     v1.setImageResource(R.drawable.forest); 
     v2.setBackgroundResource(R.drawable.forestrepeat); 
    } 

} 

여기에 어떻게 namec 무엇 사실에서와 동일 "숲 : 그하여 난의 된 SharedPreferences에서로드 문자열 (아래 났 구요 버전) 값이 동일한 경우 확인 (에서 onCreate에서) 의미 ". 값을 로그에 보내면 변수가 정확히 있어야합니다 ("포레스트"). 그러나 if {} 내부에서 코드를 실행하지 않습니다. 나에게 악몽을주고있다. 나는 일주일 동안 붙어 있었어!

동일한 코드에서 sharedPreferences (TRHprefs로 레이블 됨) 세트를로드하고 그 각각 (6 개의 정수 및 3 개의 문자열)이로드되어 잘 표시됩니다. 나는 심지어 if {}를 추가하여 TRHprefs의 1 문자열과 1 정수를 테스트했습니다. 둘 다 다시 돌아 왔습니다.

Q.1 강제 종료시 내 sharedPreferences xml이 어떻게 든 손상 될 수 있습니까?

Q.2 상황을 디버그하는 데 도움이되는 강제 닫기를 사용하기 전후에 XML 파일을 볼 수있는 방법이 있습니까? 정말 고마워!

답변

1

해당 문자열입니다. 이 시도 :

if("forest".equals(namec)){ 
+0

? 저는 지난 주 동안 제 코드를 청소하고, 변경하고, 옮기고, 닦았습니다 ... 그리고 이번에는 문자열을 "부적절한"방법으로 점검하고있었습니다 ... 와우, 배워야 할 것이 많습니다. 감사! – cerealspiller

1

을 두 개의 문자열을 비교하려는 경우이를 사용해야합니다 : 진심

if(namec.equals("forest")){ 
     v1.setImageResource(R.drawable.forest); 
     v2.setBackgroundResource(R.drawable.forestrepeat); 
    } 
+0

네, 그게 ... 지금은 잘 작동합니다. 당신의 대답을 받아 들였 겠지만, Femi가 당신을 때렸다. 다시 한 번 감사드립니다! – cerealspiller