2017-09-24 43 views
0

我和这Android Emitter.Listener not working 问题一样的问题,但在该问题给出的答案是没有帮助,我什至不能找到任何解决方案。任何人都可以帮我解决这个问题吗?我的事件发射器工作正常,但我无法接收由JS发射的信息

在这里,我的代码我送的base64字符串的Node.js服务器,保存文件并发送链接回到我(将文件保存工作正常)。即使该链接不会烤。

我的代码是:

public void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
socket.connect(); 
    socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() { 
     @Override 
     public void call(Object... args) { 
      socket.on("data", handleIncomingMessage); 
     } 
    });} 
//Onclick of a button 
JSONObject obj=new JSONObject(); 
      try { 
       obji.put("profile_pic",image); 
       socket.emit("data",obji); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
    private Emitter.Listener handleIncomingMessage = new Emitter.Listener(){ 

    @Override 
    public void call(final Object... args){ 
     Toast.makeText(getActivity().getApplicationContext(),"Hello India",Toast.LENGTH_LONG).show(); 
     getActivity().runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       JSONObject data = (JSONObject) args[0]; 
       //JSONObject d=(JSONObject) args[1]; 
       String imgLink; 
       try { 
        imgLink = data.getString("data").toString(); 
        Glide.with(getContext()).load(imgLink).asBitmap().dontAnimate().into(imageView); 

        Toast.makeText(getActivity().getApplicationContext(),imgLink,Toast.LENGTH_LONG).show(); 


       } catch (JSONException e) { 
Toast.makeText(getActivity().getApplicationContext(),e.toString(),Toast.LENGTH_LONG).show(); 
       } 

      } 
     }); 
    } 
}; 
+0

有给出的答案! –

回答

0

我认为可以。你看你连接到你的服务器,但该连接需要一些时间且在此之前,你立即设置onSendFile消息处理程序的Socket实例。理论上,应该设置消息处理程序连接成功与服务器建立的。

此外,你应该发出你自己的消息与socket.emit之后上述事件。 要做到这一点简单的写:

mSocket.on(Socket.EVENT_CONNECT, new Emitter.Listener() { 
      @Override 
      public void call(Object... args) { 

       mSocket.on("send file", onSendFile); 
      } 
     }); 
mSocket.connect(); 

这样的处理程序被添加到该实例的EVENT_CONNECT发生就是后,建立到服务器的连接之后。

旁注:另外,不要忘记当活动被破坏时从套接字实例中删除处理程序。请致电mSocket.off("send file", onSendFile)内部的onDestroy活动方法。这样一来,从服务器的任何活动都不会崩溃您的应用程序,如果里面onSendFile代码使用任何活动的UI组件。
干杯!

+0

感谢您的关注,先生,但还是不能解决我的问题 –

+0

好吧。你什么时候可以调用mSocket.on(“send file”,onSendFile)?我的意思是你的服务器何时向你发送所有连接流中的响应?我没有看到任何地方首先发射。 –

+0

我已经更新了代码,请检查 –