2017-09-24 51 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

我已經更新了代碼,請檢查 –

相關問題