私のアプリでは、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)