在socket.io聊天中收到消息时的前台服务问题

时间:2019-05-09 08:31:03

标签: android android-fragments socket.io android-service foreground-service

运行有前台服务且设备保持连接状态的应用程序,但是当从其他客户端发送消息时,该应用程序不幸地停止了。而我得到那个错误:

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);
                }
            });
        }
    };

1 个答案:

答案 0 :(得分:0)

似乎getActivity()返回一个空对象,因为该活动不再可见。

您可以使用与主UI线程关联的Handler:

Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {...);

我仍然认为UI线程不是必需的,只需调用普通线程即可。