public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
boolean result = super.onCreateOptionsMenu(menu);
setting();
return result;
} 설정 버튼 누르면 위와 같이 setting() 을 호출하구요setting() 은 미리 만들어 놓은 Setting.class 의 intent 를 부르구요
private void setting() {
Intent i = new Intent(this, Setting.class);
startActivity(i);
}public class Setting extends PreferenceActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.setting); }}그럼 만들어 놓은 setting.xml 메뉴가 떠요..
여기 까지는 괜찮은데 값을 변경하고 다시 뒤로가기 버튼 누르면 에러가 떠요
값을 변경한 것을 저장하려고 onResume() 에 getString 같은 걸로 TextEdit 에 있는 값을 가지고 오거든요..
public void onResume(){
super.onResume();
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
turnOn = pref.getBoolean("keycheck", true);
sampleRateInHz = pref.getInt("keysamplingrate", 8000);
samDurationInSec = pref.getFloat("keysamplingduration", 0.05f);
beta = pref.getFloat("keythreshold", 0.005f);
buffersizebytes = (int) (2*sampleRateInHz*samDurationInSec);
audioRecord = new AudioRecord(android.media.MediaRecorder.AudioSource.MIC,sampleRateInHz,
channelConfiguration,audioEncoding,buffersizebytes);
record();
}//onresume
그런데 이것도 문제에요..
<처음 어플이 시작될 때> 이 부분은
sampleRateInHz = pref.getInt("keysamplingrate", 8000);
에러 없이 넘어 가는데
<세팅버튼 누른 후> 에서는 디버깅 모드에서 이부분에서 에러가 떠요 (물론 뒤로가기 버튼 눌렀을때 onResume() 부르면서요)
그런데 그 바로 위의
turnOn = pref.getBoolean("keycheck", true);
여기서는 에러가 안떠요
아 이것때문에 몇일을 허비했는데 조언좀 주시면 감사드리겠습니다 ^^
그리고 SharedPreferences 는 위의 onResume() 에만 사용되었습니다.
sampleRateInHz 는 public int 선언이구요...
그럼 감사합니다.아마 파싱에러나 널포인터 에러일 가능성이 높은것 같네요..
pref.getInt(
"keysamplingrate", 8000); 이부분에서 처음에 값이 없으면 기본값 8000을 인트형으로 가지고 오는데요..
셋팅하는 부분에서 값이 String이나 널값으로 들어가는지 확인해보세요..죄송합니다.
이게 로그캣에 보인 내용인데
01-02 23:08:26.129: ERROR/AndroidRuntime(12474): Uncaught handler: thread main exiting due to uncaught exception
01-02 23:08:26.164: ERROR/AndroidRuntime(12474): java.lang.RuntimeException: Unable to resume activity {alarm.detect/alarm.detect.Main}: java.lang.ClassCastException: java.lang.String
01-02 23:08:26.164: ERROR/AndroidRuntime(12474): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2950)
01-02 23:08:26.164: ERROR/AndroidRuntime(12474): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2965)
01-02 23:08:26.164: ERROR/AndroidRuntime(12474): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1889)
01-02 23:08:26.164: ERROR/AndroidRuntime(12474): at android.os.Handler.dispatchMessage(Handler.java:99)
01-02 23:08:26.164: ERROR/AndroidRuntime(12474): at android.os.Looper.loop(Looper.java:123)
01-02 23:08:26.164: ERROR/AndroidRuntime(12474): at android.app.ActivityThread.main(ActivityThread.java:4363)
01-02 23:08:26.164: ERROR/AndroidRuntime(12474): at java.lang.reflect.Method.invokeNative(Native Method)
01-02 23:08:26.164: ERROR/AndroidRuntime(12474): at java.lang.reflect.Method.invoke(Method.java:521)
01-02 23:08:26.164: ERROR/AndroidRuntime(12474): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:862)
01-02 23:08:26.164: ERROR/AndroidRuntime(12474): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)
01-02 23:08:26.164: ERROR/AndroidRuntime(12474): at dalvik.system.NativeStart.main(Native Method)
01-02 23:08:26.164: ERROR/AndroidRuntime(12474): Caused by: java.lang.ClassCastException: java.lang.String
01-02 23:08:26.164: ERROR/AndroidRuntime(12474): at android.app.ApplicationContext$SharedPreferencesImpl.getInt(ApplicationContext.java:2737)
01-02 23:08:26.164: ERROR/AndroidRuntime(12474): at alarm.detect.Main.onResume(Main.java:116)
01-02 23:08:26.164: ERROR/AndroidRuntime(12474): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1149)
01-02 23:08:26.164: ERROR/AndroidRuntime(12474): at android.app.Activity.performResume(Activity.java:3772)
01-02 23:08:26.164: ERROR/AndroidRuntime(12474): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2937)
01-02 23:08:26.164: ERROR/AndroidRuntime(12474): ... 10 more
감사합니다. 꾸벅
keysamplingrate의 값을 셋팅하는 부분에서 String형으로 저장되는것 같은데..
값을 가져올때 int형으로 가져오니 에러가 날테지요..
아 그런 이유였군요^^ 그런데 저는 아래와 같이
public class Main extends Activity {
....
public int sampleRateInHz=8000;
....
public void onCreate(Bundle savedInstanceState){ ....
처음에 지정해주고 그 다음부터는 따로 세팅을 안하는데요...
그러면 단말기에서 세팅 버튼을 누르고 세팅이 완료된 후 뒤로가기 버튼을 클릭했을 때,
입력한 값들은 숫자를 입력했어도 모두 string 으로 저장되는건가요?
감사합니다.^^
sampleRate이니 ListPreference를 사용하실 듯 한데
ListPreference는 string으로 저장됩니다.
xml로 사용하는 Preference는 boolean값을 제외하곤 대부분 string입니다.




로그를 붙여주세요.