2

私がやろうとしていること


GPSを有効または無効にできる場合、スイッチボタンをホストするPreferenceActivityを作成しようとしています。レイアウトとすべてが完全に機能します。スイッチが何かを実行するコードを追加した後、私の目には存在しないはずの NullPointerException が発生します。

質問


この Nullpointer が存在する理由を教えてください =) いくつかのコードニペットが役立ちます。

コード


PrefsActivity:

private Switch enable_gps;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.prefs);

        enable_gps = (Switch) findViewById(R.id.switch1);

        ActionBar actionBar = this.getActionBar();
        // So kann android.R.id.home benützt werden
        actionBar.setDisplayHomeAsUpEnabled(true);

        if (getPref() == false) {  <--- Here I get a Nullpointer
            // enable_gps.setEnabled(false);
            enable_gps.setChecked(false);
        } else {
            enable_gps.setChecked(true);
        }

        enable_gps.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                if (getPref() == false) {

                    GPSService.actionStart(getApplicationContext());
                    setPref(true);

                } else if (getPref() == true) {

                    GPSService.actionStop(getApplicationContext());
                    setPref(false);

                }
            }
        });

    }

getPref と setPref

//Um zu prüfen ob on oder off
    private boolean getPref() {
        boolean isStarted;
        // SharedPreferences instanzieren
        SharedPreferences mPrefs = this.getSharedPreferences(LOG_TAG, 0);
        return isStarted = mPrefs.getBoolean(PREF_STARTED, false);
    }

    //Um zu setzen ob on oder off
    private void setPref(boolean started) {
        SharedPreferences settings = this.getSharedPreferences(LOG_TAG, 0);
        SharedPreferences.Editor editor = settings.edit();
        editor.putBoolean(PREF_STARTED, started);
        editor.commit();
    }

ログキャット:

07-26 09:47:02.991: E/AndroidRuntime(21729): FATAL EXCEPTION: main
07-26 09:47:02.991: E/AndroidRuntime(21729): java.lang.RuntimeException: Unable to start activity ComponentInfo{de.ivocore/de.ivocore.preferences.PrefsActivity}: java.lang.NullPointerException
07-26 09:47:02.991: E/AndroidRuntime(21729):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
07-26 09:47:02.991: E/AndroidRuntime(21729):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
07-26 09:47:02.991: E/AndroidRuntime(21729):    at android.app.ActivityThread.access$600(ActivityThread.java:130)
07-26 09:47:02.991: E/AndroidRuntime(21729):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
07-26 09:47:02.991: E/AndroidRuntime(21729):    at android.os.Handler.dispatchMessage(Handler.java:99)
07-26 09:47:02.991: E/AndroidRuntime(21729):    at android.os.Looper.loop(Looper.java:137)
07-26 09:47:02.991: E/AndroidRuntime(21729):    at android.app.ActivityThread.main(ActivityThread.java:4745)
07-26 09:47:02.991: E/AndroidRuntime(21729):    at java.lang.reflect.Method.invokeNative(Native Method)
07-26 09:47:02.991: E/AndroidRuntime(21729):    at java.lang.reflect.Method.invoke(Method.java:511)
07-26 09:47:02.991: E/AndroidRuntime(21729):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
07-26 09:47:02.991: E/AndroidRuntime(21729):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
07-26 09:47:02.991: E/AndroidRuntime(21729):    at dalvik.system.NativeStart.main(Native Method)
07-26 09:47:02.991: E/AndroidRuntime(21729): Caused by: java.lang.NullPointerException
07-26 09:47:02.991: E/AndroidRuntime(21729):    at de.ivocore.preferences.PrefsActivity.onCreate(PrefsActivity.java:35)
07-26 09:47:02.991: E/AndroidRuntime(21729):    at android.app.Activity.performCreate(Activity.java:5008)
07-26 09:47:02.991: E/AndroidRuntime(21729):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
07-26 09:47:02.991: E/AndroidRuntime(21729):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
07-26 09:47:02.991: E/AndroidRuntime(21729):    ... 11 more

事前にご協力いただきありがとうございます

よろしくお願いします

サファリ

4

2 に答える 2

6

この発言を追加

setContentView(R.layout.main); <-----

// main は、R.id.switch1 を宣言した xml レイヤーです

enable_gps = (Switch) findViewById(R.id.switch1);
                                   ^^^^^^^^^^^^

private boolean getPref() {
        boolean isStarted=false;<------
        // SharedPreferences instanzieren
        SharedPreferences mPrefs = this.getSharedPreferences(LOG_TAG, 0);
        return isStarted = mPrefs.getBoolean(PREF_STARTED, false);
    }
于 2012-07-26T09:54:56.793 に答える
3

enable_gps = (Switch) findViewById(R.id.switch1);呼び出さずにこのビューにアクセスしているsetContentView();ため、ここでは enable_gps がnullであり、呼び出そうとしているenable_gps.setChecked(false);ため、NPE..

于 2012-07-26T09:54:58.520 に答える