运行有前台服务且设备保持连接状态的应用程序,但是当从其他客户端发送消息时,该应用程序不幸地停止了。而我得到那个错误:
E/AndroidRuntime: FATAL EXCEPTION: EventThread
Process: com.github.nkzawa.socketio.androidchat, PID: 6693
java.lang.NullPointerException: Attempt to invoke virtual method
'void android.support.v4.app.FragmentActivity.runOnUiThread(java.lang.Runnable)'
on a null object reference
at com.github.nkzawa.socketio.androidchat.MainFragment$6.call(MainFragment.java:339)
这是我的Fragment类中的代码,logcat给我造成错误。
private Emitter.Listener onNewMessage = new Emitter.Listener() {
@Override
public void call(final Object... args) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
JSONObject data = (JSONObject) args[0];
String username;
String message;
try {
username = data.getString("username");
message = data.getString("message");
} catch (JSONException e) {
Log.e(TAG, e.getMessage());
return;
}
removeTyping(username);
addMessage(username, message);
setNotificationMessage(message, username);
}
});
}
};
答案 0 :(得分:0)
似乎getActivity()返回一个空对象,因为该活动不再可见。
您可以使用与主UI线程关联的Handler:
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {...);
我仍然认为UI线程不是必需的,只需调用普通线程即可。