0

わかりましたので、次のコードは OnResume に配置され、Force Close を引き起こすようです。データベース内のテーマなどのすべての変数を設定する別のアクティビティ (オプション) があります。私がやりたかったのは、データベース onResume からテーマやその他のパラメーターを復元し、SetThemeLight のようなパブリック ボイドで色を変更することだけでした。私はこれがすぐに機能することを望んでおり、onResume がそれを行うための最良の方法であると考えました。

int Theme = 1;
    Theme = prefs.getInt("theme", Theme);

    switch(Theme){
    case 1:
        SetThemeLight (this);
    break;
    case 2:
        SetThemeBlue (this);        
    break;
    case 3:
        SetThemeDark (this);
    break;
    }

そしてSetTheme...、例としての方法の1つ:

public void SetThemeLight (MyActivity myActivity) {
    final EditText edit_text = (EditText) findViewById(R.id.editText1);
    edit_text.setBackgroundColor(Color.GRAY);
}

オプションへのアクセス方法は次のとおりです。

    public boolean onKeyDown(int keyCode, KeyEvent event) {

    //options on 'menu' keypress.
    if (keyCode == KeyEvent.KEYCODE_MENU) {
        Intent opt = new Intent(this, OptionsActivity.class);
        startActivity (opt);
    };

    return true;

デバッグ情報は次のとおりです。

12-23 15:37:59.960: E/AndroidRuntime(279): FATAL EXCEPTION: main
12-23 15:37:59.960: E/AndroidRuntime(279): java.lang.RuntimeException: Unable to resume activity {net.wswld.dtype.writer/net.wswld.dtype.writer.OptionsActivity}: java.lang.NullPointerException
12-23 15:37:59.960: E/AndroidRuntime(279):  at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3128)
12-23 15:37:59.960: E/AndroidRuntime(279):  at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3143)
12-23 15:37:59.960: E/AndroidRuntime(279):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2684)
12-23 15:37:59.960: E/AndroidRuntime(279):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
12-23 15:37:59.960: E/AndroidRuntime(279):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
12-23 15:37:59.960: E/AndroidRuntime(279):  at android.os.Handler.dispatchMessage(Handler.java:99)
12-23 15:37:59.960: E/AndroidRuntime(279):  at android.os.Looper.loop(Looper.java:123)
12-23 15:37:59.960: E/AndroidRuntime(279):  at android.app.ActivityThread.main(ActivityThread.java:4627)
12-23 15:37:59.960: E/AndroidRuntime(279):  at java.lang.reflect.Method.invokeNative(Native Method)
12-23 15:37:59.960: E/AndroidRuntime(279):  at java.lang.reflect.Method.invoke(Method.java:521)
12-23 15:37:59.960: E/AndroidRuntime(279):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
12-23 15:37:59.960: E/AndroidRuntime(279):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
12-23 15:37:59.960: E/AndroidRuntime(279):  at dalvik.system.NativeStart.main(Native Method)
12-23 15:37:59.960: E/AndroidRuntime(279): Caused by: java.lang.NullPointerException
12-23 15:37:59.960: E/AndroidRuntime(279):  at net.wswld.dtype.writer.DTypeActivity.onResume(DTypeActivity.java:109)
12-23 15:37:59.960: E/AndroidRuntime(279):  at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1149)
12-23 15:37:59.960: E/AndroidRuntime(279):  at android.app.Activity.performResume(Activity.java:3823)
12-23 15:37:59.960: E/AndroidRuntime(279):  at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3118)
4

2 に答える 2

1

おそらく、エラーは、最終変数を別のメソッドに送信していることです。なぜ EditText を送信しているのですか? 確かに、edit_text.getText() の結果を送信するだけで済みますか? また、すべての if の代わりに、この配置を使用する必要があります。

switch(Theme){
case 1:
//do something
break;
case 2:
//do something
break;
case 3:
//do something
break;
}
于 2012-12-23T15:52:08.227 に答える
0

わかりました、回避策を見つけたようです。

私がしたことはMainActivity onResume、オプションが実際に変更されたかどうかをチェックし、それからそのswitch部分を実行するかどうかをチェックする単純なブールチェックを作成することです。

いずれかのボタンが押されると、ブール値がデータベースOptionsActivityにコミットされ、メソッドを実行する前にその値がチェックされます。opt_changedonResumeSetTheme...

とにかく、答えと注意をしてくれたみんなに感謝します。そして、私は本当に Android のボイドとその振る舞いを読む必要があります。

于 2012-12-23T20:02:44.050 に答える