0

私のアプリでは、MQTT サーバー/ブローカーに接続します。接続の設定/構成は SQLiteDB から取得されます。取得したエントリ (ip、port、clientID、KAtimer、sessionFlag) を確認したところ、すべて有効でした。

これらの構成は で返されonActivityResult、 でonActivityResultメソッドを呼び出します

private void setUpMQTTEnvironment(Bundle extras)以下に掲載されていません。subActivity から返されたバンドルから値を抽出し、バンドルに含まれる各値を対応する に割り当てるだけset() methodです。たとえば、IP とポートを抽出すると、それらを setIP( ip) および setPORT(ポート)

サーバーに接続するために以下に投稿されたonResume()呼び出しMQTTConnect(...,..)で、実際にはこのステップに tpconnectメソッドの同期コールバックが言うconnection failsが、これはクライアントオブジェクトが null ではないことも意味する

問題は、戻るボタンを押したときにonpause呼び出され、次のように受信NPEすることですlogcat errors

なぜ私は受け取るのNPEですか?クライアントオブジェクトがnullかどうかを確認し、nullでない場合はNPEエラーを受け取るべきではなく、nullの場合はアプリを正常に閉じる必要があります。

エラーを見つけるのを手伝ってください、なぜ私は受け取るのですかNPE

MQTTConnect :

private void MQTTConnect(MqttAndroidClient client, MqttConnectOptions opts) throws MqttException {
    // TODO Auto-generated method stub
    client.registerResources(this);
    client.setCallback(asynchCallBack);
    client.connect(opts, getApplicationContext(), synchCallBack);
    this.setClient(client);
}

onResume :

@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    Log.w(TAG, "@onResume()");

    if ( (this.MQTT_ASSETS_AVAILABLE) && (this.getClient() != null) && (this.getClientOpts() != null) ) {
        Log.d(TAG, "@onResume(): ConnectionAssets: not null, Client: not null, opts: not null");
        try {
            MQTTConnect(this.getClient(), this.getClientOpts());
        } catch (MqttException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            }
            Log.e(TAG, "@onResume: Exception catched -> Connection problems.");
        }
    } else {
        Log.d(TAG, "@onResume(): either ConnectionAssets are not available or client/opts is null");
    }
}

一時停止:

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
    Log.w(TAG, "@onPause()");

    if ((this.getClient() != null) ) {
        if (this.getClient().isConnected()) {
            Log.w(TAG, "@onPause(): client is not null");
            this.getClient().close();
            this.getClient().unregisterResources();
            try {
                this.getClient().disconnect(this, new IMqttActionListener() {

                    @Override
                    public void onSuccess(IMqttToken arg0) {
                        // TODO Auto-generated method stub
                        Log.w(TAG, "@onSuccess(): disconnection successfull");
                    }

                    @Override
                    public void onFailure(IMqttToken arg0, Throwable arg1) {
                        // TODO Auto-generated method stub
                        Log.w(TAG, "@onFailure(): disconnection failed");
                    }
                });
            } catch (MqttException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

LogCat エラー:

02-04 12:32:37.618: E/AndroidRuntime(10392): FATAL EXCEPTION: main
02-04 12:32:37.618: E/AndroidRuntime(10392): Process: com.example.mqtt_designlayout_02, PID: 10392
02-04 12:32:37.618: E/AndroidRuntime(10392): java.lang.RuntimeException: Unable to pause activity {com.example.mqtt_designlayout_02/com.example.mqtt_designlayout_02.MainActivity}: java.lang.NullPointerException
02-04 12:32:37.618: E/AndroidRuntime(10392):    at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3185)
02-04 12:32:37.618: E/AndroidRuntime(10392):    at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3140)
02-04 12:32:37.618: E/AndroidRuntime(10392):    at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:3118)
02-04 12:32:37.618: E/AndroidRuntime(10392):    at android.app.ActivityThread.access$1000(ActivityThread.java:157)
02-04 12:32:37.618: E/AndroidRuntime(10392):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1264)
02-04 12:32:37.618: E/AndroidRuntime(10392):    at android.os.Handler.dispatchMessage(Handler.java:102)
02-04 12:32:37.618: E/AndroidRuntime(10392):    at android.os.Looper.loop(Looper.java:157)
02-04 12:32:37.618: E/AndroidRuntime(10392):    at android.app.ActivityThread.main(ActivityThread.java:5293)
02-04 12:32:37.618: E/AndroidRuntime(10392):    at java.lang.reflect.Method.invokeNative(Native Method)
02-04 12:32:37.618: E/AndroidRuntime(10392):    at java.lang.reflect.Method.invoke(Method.java:515)
02-04 12:32:37.618: E/AndroidRuntime(10392):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
02-04 12:32:37.618: E/AndroidRuntime(10392):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
02-04 12:32:37.618: E/AndroidRuntime(10392):    at dalvik.system.NativeStart.main(Native Method)
02-04 12:32:37.618: E/AndroidRuntime(10392): Caused by: java.lang.NullPointerException
02-04 12:32:37.618: E/AndroidRuntime(10392):    at org.eclipse.paho.android.service.MqttAndroidClient.isConnected(MqttAndroidClient.java:227)
02-04 12:32:37.618: E/AndroidRuntime(10392):    at com.example.mqtt_designlayout_02.MainActivity.onPause(MainActivity.java:513)
02-04 12:32:37.618: E/AndroidRuntime(10392):    at android.app.Activity.performPause(Activity.java:5493)
02-04 12:32:37.618: E/AndroidRuntime(10392):    at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1251)
02-04 12:32:37.618: E/AndroidRuntime(10392):    at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3171)
4

0 に答える 0