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

안드로이드 토글버튼 저장

0 추천

지금.. 버튼5와 버튼6에 상태에 따라서 버튼7이 활성화비거나 비활성되는 것을
저장을 해야되는데..
int btn7visi = pref.getInt("btn7visi", View.VISIBLE);
btn7.setVisibility((int) btn7visi);
editor.putInt("btn7visi", View.VISIBLE);
이런식으로 나타내서는 저장이 됬는데 못불러오는건지...아니면
저장자체가 안된건지 잘 모르겠는데요. 타입이 Long이 맞나요?..
뷰라는 자체가 타입이 있나..;;

어떤식으로 저장을 해야될까요..?


 

헬프미 (5,430 포인트) 님이 2015년 1월 4일 질문
헬프미님이 2015년 1월 4일 수정

2개의 답변

0 추천
 
채택된 답변
int btn7visi = pref.getInt("btn7visi", View.VISIBLE);
이 한 줄 자체에 문법적인 오류는 없어 보입니다.
로그를 잘 보셔야 할 것 같아요.

그리고 이클립스를 쓰신다면 View.VISIBLE 위에 마우스 포인터를 올려 보시면
해당 변수(상수)의 타입이 int형 임을 알 수 있습니다. (또는 Ctrl+클릭 하셔도 확인 가능)

한 가지 더 말씀드리면
버튼 7을 '활성화' / '비활성화' 한다고 하셨는데
btn7.setVisibility 는 버튼을 보이고 안보이고 설정을 하는 것이라
이게 의도하신 메소드가 맞는지 모르겠네요?
setEnabled 메소드를 쓰셔야 할 거 같아서요.
가랑비 (10,530 포인트) 님이 2015년 1월 4일 답변
헬프미님이 2015년 1월 5일 채택됨
btn7.setVisibility(View.VISIBLE); 을 바꾸어 주어야 한다는 말씀이신가요?..

//
btn7.setEnabled(true);
editor.putInt("btn7visi", View.VISIBLE);
int btn7visi = pref.getInt("btn7visi", View.VISIBLE);
btn7.setVisibility((int) btn7visi);

이렇게 하라는 말씀이신가요?
바꾸어봤는데. 강제종료가 되네요.
로그캣 부분입니다.

01-05 07:18:50.855: W/dalvikvm(27947): threadid=1: thread exiting with uncaught exception (group=0x417c02a0)
01-05 07:18:50.860: E/AndroidRuntime(27947): FATAL EXCEPTION: main
01-05 07:18:50.860: E/AndroidRuntime(27947): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.andro/com.andro.settingActivity}: java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
01-05 07:18:50.860: E/AndroidRuntime(27947):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2100)
01-05 07:18:50.860: E/AndroidRuntime(27947):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125)
01-05 07:18:50.860: E/AndroidRuntime(27947):     at android.app.ActivityThread.access$600(ActivityThread.java:140)
01-05 07:18:50.860: E/AndroidRuntime(27947):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227)
01-05 07:18:50.860: E/AndroidRuntime(27947):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-05 07:18:50.860: E/AndroidRuntime(27947):     at android.os.Looper.loop(Looper.java:137)
01-05 07:18:50.860: E/AndroidRuntime(27947):     at android.app.ActivityThread.main(ActivityThread.java:4898)
01-05 07:18:50.860: E/AndroidRuntime(27947):     at java.lang.reflect.Method.invokeNative(Native Method)
01-05 07:18:50.860: E/AndroidRuntime(27947):     at java.lang.reflect.Method.invoke(Method.java:511)
01-05 07:18:50.860: E/AndroidRuntime(27947):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1008)
01-05 07:18:50.860: E/AndroidRuntime(27947):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:775)
01-05 07:18:50.860: E/AndroidRuntime(27947):     at dalvik.system.NativeStart.main(Native Method)
01-05 07:18:50.860: E/AndroidRuntime(27947): Caused by: java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
01-05 07:18:50.860: E/AndroidRuntime(27947):     at android.app.SharedPreferencesImpl.getInt(SharedPreferencesImpl.java:221)
01-05 07:18:50.860: E/AndroidRuntime(27947):     at com.andro.settingActivity.onCreate(settingActivity.java:72)
01-05 07:18:50.860: E/AndroidRuntime(27947):     at android.app.Activity.performCreate(Activity.java:5206)
01-05 07:18:50.860: E/AndroidRuntime(27947):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
01-05 07:18:50.860: E/AndroidRuntime(27947):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2064)
01-05 07:18:50.860: E/AndroidRuntime(27947):     ... 11 more
01-05 07:18:52.505: I/Process(27947): Sending signal. PID: 27947 SIG: 9
앞전에 어떤 분이 답변해 주셨던 거랑 비슷한 상황인데요
 java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
타입 문제인데, 어디선가 editor.putLong("btn7visi", View.VISIBLE); 이렇게
같은 "btn7visi" 키값으로 먼저 long 타입으로 저장한 곳이 있는지 확인해 보세요~
그리고 editor.putInt("btn7visi", View.VISIBLE); 처럼 값을 넣어준 후에는
editor.commit(); 를 해 주셔야 합니다. 그래야 넣어준 값이 반영이 돼요.
Long타입이 없네요...
그리고.. commit();으로 저장햇구요... 무슨문젠지를 모르겟네요..

01-05 21:07:25.790: W/dalvikvm(1756): threadid=1: thread exiting with uncaught exception (group=0x41a4f2a0)
01-05 21:07:25.790: E/AndroidRuntime(1756): FATAL EXCEPTION: main
01-05 21:07:25.790: E/AndroidRuntime(1756): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.andro/com.andro.settingActivity}: java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
01-05 21:07:25.790: E/AndroidRuntime(1756):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2100)
01-05 21:07:25.790: E/AndroidRuntime(1756):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125)
01-05 21:07:25.790: E/AndroidRuntime(1756):     at android.app.ActivityThread.access$600(ActivityThread.java:140)
01-05 21:07:25.790: E/AndroidRuntime(1756):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227)
01-05 21:07:25.790: E/AndroidRuntime(1756):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-05 21:07:25.790: E/AndroidRuntime(1756):     at android.os.Looper.loop(Looper.java:137)
01-05 21:07:25.790: E/AndroidRuntime(1756):     at android.app.ActivityThread.main(ActivityThread.java:4898)
01-05 21:07:25.790: E/AndroidRuntime(1756):     at java.lang.reflect.Method.invokeNative(Native Method)
01-05 21:07:25.790: E/AndroidRuntime(1756):     at java.lang.reflect.Method.invoke(Method.java:511)
01-05 21:07:25.790: E/AndroidRuntime(1756):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1008)
01-05 21:07:25.790: E/AndroidRuntime(1756):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:775)
01-05 21:07:25.790: E/AndroidRuntime(1756):     at dalvik.system.NativeStart.main(Native Method)
01-05 21:07:25.790: E/AndroidRuntime(1756): Caused by: java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
01-05 21:07:25.790: E/AndroidRuntime(1756):     at android.app.SharedPreferencesImpl.getInt(SharedPreferencesImpl.java:221)
01-05 21:07:25.790: E/AndroidRuntime(1756):     at com.andro.settingActivity.onCreate(settingActivity.java:72)
01-05 21:07:25.790: E/AndroidRuntime(1756):     at android.app.Activity.performCreate(Activity.java:5206)
01-05 21:07:25.790: E/AndroidRuntime(1756):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
01-05 21:07:25.790: E/AndroidRuntime(1756):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2064)
01-05 21:07:25.790: E/AndroidRuntime(1756):     ... 11 more
01-05 21:07:27.180: I/Process(1756): Sending signal. PID: 1756 SIG: 9
0 추천
http://blog.scaloid.org/2013/03/dynamicly-accessing-sharedpreferences.html

 

위 링크를 참고해 보세요 (코드도 있습니다)

 

 

doridori2013@nate.com
익명사용자 님이 2015년 1월 4일 답변
현재 링크처럼 한 상태인데요...
        int btn7visi = pref.getInt("btn7visi", View.VISIBLE);
로그캣 부분에서는 여기가 오류라는데...
뷰가 어떤타입이죠?
...