마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

SharedPreferences 재부팅하면 초기화되요 ㅠㅠ

0 추천
package project.star_note;

import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.Switch;

public class Note_Option extends Activity {
	private SharedPreferences mPref;
	private SharedPreferences.Editor mPrefEdit;
	
	Switch pass_switch;
	Button option_back_btn, option_back_btn2;
	
	protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.option_main);

        pass_switch = (Switch) findViewById(R.id.pass_switch);
        option_back_btn  = (Button) findViewById(R.id.option_back_btn);
        option_back_btn2 = (Button) findViewById(R.id.option_back_btn2);
        
        mPref = getSharedPreferences("setting", 0);
		mPrefEdit = mPref.edit();
        
        option_back_btn.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				finish();
        	}
        });

        option_back_btn2.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				finish();
        	}
        });    
        
        pass_switch.setOnCheckedChangeListener(new OnCheckedChangeListener() {
			@Override
			public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
				if(isChecked) {
					mPrefEdit.putString("switch", "1");
					mPrefEdit.commit();
					Log.d("switch", "on");
				}
				else {
					mPrefEdit.putString("switch", "0");
					mPrefEdit.commit();
					Log.d("switch", "off");
				}
			}
        });
        
        if(mPref.getString("switch", "") == "1") {
        	pass_switch.setChecked(true);
        	Log.d("setting", "true");
        } else {
        	pass_switch.setChecked(false);
        	Log.d("setting", "false");
        }
	}

}

어플을 껏다 키는건 값이 유지가 됩니다.

그런데 디바이스를 재부팅하면 값이 초기화됩니다.

그리고 프리퍼런스가 제대로 작동을 안하게 되네요...

왜 어플 껏다 킬때만 유지가 되는거죠? ㅠㅠ

Android초보개발자 (1,230 포인트) 님이 2015년 2월 12일 질문
Android초보개발자님이 2015년 2월 12일 수정

3개의 답변

+2 추천
 
채택된 답변

값을 비교하는 부분이 잘못된것 같아요.

유지가 되는것 같다고 하신건 착시현상 같네요. (앱이 완전히 죽지않아서)

값을 int형으로 변경하시거나, String type은 equals로 비교해주세요.

if(mPref.getString("switch", "").equals("1")) {
    pass_switch.setChecked(true);
    Log.d("setting", "true");
} else {
    pass_switch.setChecked(false);
    Log.d("setting", "false");
}
 
uno (3,820 포인트) 님이 2015년 2월 12일 답변
Android초보개발자님이 2015년 2월 12일 채택됨
해결했습니다. 감사합니다~~
0 추천
저 코드만으론 정삭적으로 동작해야할것같은데요 .. 혹시 재부팅하고 앱실행을 핸드폰이아닌 이클립스로 런프로젝트를 한다거나 그런쪽에서 오는 문제는 아닐까요?
tjdrnr (190 포인트) 님이 2015년 2월 12일 답변
0 추천
Editor 에는 putBoolean 과 getBoolean 이 있습니다.
mamondebaltob (32,750 포인트) 님이 2015년 2월 12일 답변
...