2017-09-24 5 views
0

私はこのAndroid Emitter.Listener not working 質問と同じ問題を抱えていますが、その質問の答えは役に立たなかったし、誰でもこの問題を解決するのを手伝ってもらえますか?イベントのエミッタが正常に動作していますが、私はJSから発せられた情報を受け取ることができません

私のコードでは、ファイルを保存してリンクを私に送り返すnode.jsサーバーにbase64文字列を送信します(ファイルの保存は正常に動作しています)。リンクがトーストされていません。

私のコードは次のとおりです。

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.emitAFTERで上記のイベントを送信する必要があります。 はこれを行うには、単に書く:

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

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

をサーバーへの接続が確立された後EVENT_CONNECTが、ある行われた後、この方法では、ハンドラは、インスタンスに追加されます。

サイドノート:また、アクティビティが破棄されたときにソケットインスタンスからハンドラを削除することを忘れないでください。アクティビティのonDestroyメソッド内でmSocket.off("send file", onSendFile)に電話してください。 onSendFile内のコードにアクティビティのUIコンポーネントのいずれかが使用されている場合、この方法では、サーバーからのイベントはアプリをクラッシュさせません。
乾杯!

+0

あなたの注意をいただきありがとうございますが、それは私の問題を解決できませんでした –

+0

さて、 mSocket.on( "send file"、onSendFile)はいつ呼ばれると思いますか?私はいつあなたのサーバーがあなたにすべての接続フローで応答を送るのですか?私は最初にどこにも 'emit'がありません。 –

+0

私はそれをあなたの 'socket.on(「イベント名」、handleIncomingMessage)がある?' –

関連する問題