2016-08-09 4 views
-1

私はhandleMessageアンドロイドハンドラのhandleMessage

+0

AsyncTasksを使用してみてください。これははるかに簡単でクリーンです。 –

+0

多分それは問題ですが、 'AsyncTask'の' doInbackground'で 'onPictureTaken'を使用すると' onPictureTaken'と同じエラーが発生します – SimpleCoder

+0

logcatログを共有できますか? –

答えて

0

でメインスレッドの例外にネットワークを取得していますなぜあなたは、メインスレッドで、その上に作業中のハンドラのインスタンスを作成しますので、誰かが教えてもらえます。ヘンドラーでは、メインスレッドでソケット接続(インターネット接続)を作成しようとします。

/** 
    * Default constructor associates this handler with the {@link Looper} for the 
    * current thread. 
    * 
    * If this thread does not have a looper, this handler won't be able to receive messages 
    * so an exception is thrown. 
    */ 
    public Handler() ; 
0

私はあなたが新しいスレッドを使用してみてくださいによるToast.makeText(getApplicationContext(), count, Toast.LENGTH_LONG).show();

に例外が発生していると思います:

runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
     showToast(MessageBuilder.SUCCESSFUL_COMMENT); 
     } 
    }); 
0

あなたがバックグラウンドであなたのハンドラを実行する必要があります。これにはLooperを使用できます。 https://developer.android.com/reference/android/os/Looper.htmlを参照してください。

あなたはこれを試みることができる:

Thread thread = new Thread() { 
     @Override 
     public void run() { 
      super.run(); 
      Looper.prepare(); 

      handler = new Handler() { 
       @Override 
       public void handleMessage(Message msg) { 
        super.handleMessage(msg); 
        try { 
         String tmp = msg.obj.toString(); 
         InetAddress serverAddr = InetAddress.getByName(serverIP); 
         socket = new Socket(serverAddr, serverPort); 
         OutputStream outStream = socket.getOutputStream(); 
         PrintWriter writer = new PrintWriter(outStream); 
         writer.write(tmp); 
         writer.flush(); 
         InputStream inStream = socket.getInputStream(); 
         byte[] xxx = new byte[20]; 
         int count = inStream.read(xxx); 
//   Toast.makeText(getApplicationContext(), count, Toast.LENGTH_LONG).show(); 

         outStream.flush(); 
         outStream.close(); 

        } catch (UnknownHostException e) { 
         e.printStackTrace(); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } catch (Exception e) { 
         e.printStackTrace(); 
        } finally { 
         Looper.myLooper().quit(); 
        } 
       } 

      }; 
      handler.removeCallbacks(this); 
      Looper.loop(); 
     } 
    }; 

    thread.start(); 

はまた、あなたは例外RuntimeErrorが発生します、あなたのハンドラで Toastを示しています。ハンドラーからトーストを取り出してください。

+0

これはどのように見えるのですか?自分のコードに基づいてこれを表示できますか? – SimpleCoder

+0

私はこれを私の勝利で解決しようとしていましたが、私はいつもInputstreamによって引き起こされた "ネットワーク上のメインスレッド例外"を持っています – SimpleCoder

+0

@SimpleCoder答えを更新しました。 –

関連する問題