2011-11-03 8 views
0

- 私は、コードはこれではありません:のEditTextのEditTextのshowテキスト、ないショーanythigsをしようと何のショーテキスト

public void run() 
{ 
    String mensaje; 
    while(true) 
    { 
     try 
     { 
     mensaje = b.readLine(); 
     Log.d("mensaje", mensaje); 
     _et_ip.setText(mensaje); 
     } 
     catch (IOException e){e.printStackTrace();} 
    } 
} 

メインクラスが実行可能

public class ClienteTcpAnroid extends Activity implements Runnable 

とLog.dを実装メッセージは正しく表示されますが、_et_ip.setText(mensaje)はメッセージを表示しません。あなたは非常に多くの

public class ClienteTcpAnroid extends Activity implements Runnable 
{ 

private static String myIP; 
private static String myPort; 
String mensaje; 
Thread threadProcesaAlarmas; 
public TextView _tv_estado; 
    public EditText _et_ip; 
    public EditText _et_port; 
    public Button botonConectar; 
    BufferedReader b; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     _tv_estado = (TextView)findViewById(R.id.tv_estado); 
     _et_ip = (EditText)findViewById(R.id.et_ip); 
     _et_port = (EditText)findViewById(R.id.et_port); 
     botonConectar = (Button)findViewById(R.id.button1); 

     botonConectar.setOnClickListener(new View.OnClickListener() 
     {    
     public void onClick(View v) 
      { 
       Socket mySocket; 
      PrintStream p; 
      try 
      { 
       mySocket = new Socket("192.168.1.35", 12345); 
    b = new BufferedReader(new InputStreamReader(mySocket.getInputStream())); 
       threadProcesaAlarmas = new Thread(ClienteTcpAnroid.this); 
       threadProcesaAlarmas.start(); 
      } 
      catch (IOException e) 
      { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

@Override 
public void run() 
{ 
    String mensaje; 
    while(true) 
    { 
     try 
     { 
      mensaje = b.readLine(); 
      Log.d("mensaje", mensaje); 
      _et_ip.setText(mensaje); 
     } 
     catch (IOException e) 
     { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 
} 
} 

おかげでこれはログです::

11-03 20:01:08.507: D/mensaje(957): mensaje0 
11-03 20:01:08.507: W/dalvikvm(957): threadid=9: thread exiting with uncaught exception (group=0x40015560) 
11-03 20:01:08.536: E/AndroidRuntime(957): FATAL EXCEPTION: Thread-10 
11-03 20:01:08.536: E/AndroidRuntime(957): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 
11-03 20:01:08.536: E/AndroidRuntime(957): at android.view.ViewRoot.checkThread(ViewRoot.java:2932) 
11-03 20:01:08.536: E/AndroidRuntime(957): at android.view.ViewRoot.invalidateChild(ViewRoot.java:642) 
11-03 20:01:08.536: E/AndroidRuntime(957): at android.view.ViewRoot.invalidateChildInParent(ViewRoot.java:668) 
11-03 20:01:08.536: E/AndroidRuntime(957): at android.view.ViewGroup.invalidateChild(ViewGroup.java:2511) 
11-03 20:01:08.536: E/AndroidRuntime(957): at android.view.View.invalidate(View.java:5255) 
11-03 20:01:08.536: E/AndroidRuntime(957): at android.widget.TextView.invalidateCursor(TextView.java:3683) 
11-03 20:01:08.536: E/AndroidRuntime(957): at android.widget.TextView.spanChange(TextView.java:6390) 
11-03 20:01:08.536: E/AndroidRuntime(957): at android.widget.TextView$ChangeWatcher.onSpanAdded(TextView.java:6515) 
11-03 20:01:08.536: E/AndroidRuntime(957): at android.text.SpannableStringBuilder.sendSpanAdded(SpannableStringBuilder.java:906) 
11-03 20:01:08.536: E/AndroidRuntime(957): at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:611) 
11-03 20:01:08.536: E/AndroidRuntime(957): at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:514) 
11-03 20:01:08.536: E/AndroidRuntime(957): at android.text.Selection.setSelection(Selection.java:74) 
11-03 20:01:08.536: E/AndroidRuntime(957): at android.text.Selection.setSelection(Selection.java:85) 
11-03 20:01:08.536: E/AndroidRuntime(957): at android.text.method.ArrowKeyMovementMethod.initialize(ArrowKeyMovementMethod.java:268) 
11-03 20:01:08.536: E/AndroidRuntime(957): at android.widget.TextView.setText(TextView.java:2712) 
11-03 20:01:08.536: E/AndroidRuntime(957): at android.widget.TextView.setText(TextView.java:2592) 
11-03 20:01:08.536: E/AndroidRuntime(957): at android.widget.EditText.setText(EditText.java:78) 
11-03 20:01:08.536: E/AndroidRuntime(957): at android.widget.TextView.setText(TextView.java:2567) 
11-03 20:01:08.536: E/AndroidRuntime(957): at packag.Android.ClienteTcpAnroid.run(ClienteTcpAnroid.java:80) 
11-03 20:01:08.536: E/AndroidRuntime(957): at java.lang.Thread.run(Thread.java:1019) 
11-03 20:01:08.566: W/ActivityManager(77): Force finishing activity packag.Android/.ClienteTcpAnroid 
11-03 20:01:08.767: W/IInputConnectionWrapper(957): showStatusIcon on inactive InputConnection 
これは、すべてのコードであるアンドロイドのエミュレータあなたが非常に多く

感謝を使用して

- 私

ありがとうkevin

+0

私は、あなたの無限ループのためにメインスレッドが応答できないと推測できます。 ANRも投げられるかもしれません。あなたのDDMSファイルエクスプローラで 'traces.txt'を確認してください –

+0

正確に何を実装したいですか? –

+0

私はTCP接続を読んでEditTextに表示したい – Jjreina

答えて

1

OK。問題#1、あなたはあなたの例外を食べています。 e.printStackTrace()は何もしません。あなたはLogでログに記録するか、RuntimeExceptionでラップアンドスローする必要があります(私は静かに無視するよりも失敗する方が良いので、後者を選択しました)。

あなたはこれを行う2つの方法があります(よく、いくつかですが、2について説明します)。

1)AsyncTaskで背景の処理を行います。私はそれを選ぶだろう。独自のスレッドを作成/管理するよりもずっと簡単です。

2)コードを保存しますが、UIを更新するときは、UIスレッドで作成されたハンドラで行います。

public class ClienteTcpAnroid extends Activity implements Runnable 
{ 

    private static String myIP; 
    private static String myPort; 
    String mensaje; 
    Thread threadProcesaAlarmas; 
    public TextView _tv_estado; 
    public EditText _et_ip; 
    public EditText _et_port; 
    public Button botonConectar; 
    BufferedReader b; 
    private Handler handler; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     _tv_estado = (TextView) findViewById(R.id.tv_estado); 
     _et_ip = (EditText) findViewById(R.id.et_ip); 
     _et_port = (EditText) findViewById(R.id.et_port); 
     botonConectar = (Button) findViewById(R.id.button1); 

     botonConectar.setOnClickListener(new View.OnClickListener() 
     { 
      public void onClick(View v) 
      { 
       Socket mySocket; 
       PrintStream p; 
       try 
       { 
        mySocket = new Socket("192.168.1.35", 12345); 
        b = new BufferedReader(new InputStreamReader(mySocket.getInputStream())); 
        threadProcesaAlarmas = new Thread(ClienteTcpAnroid.this); 
        threadProcesaAlarmas.start(); 
       } 
       catch (IOException e) 
       { 
        throw new RuntimeException(e); 
       } 
      } 
     }); 

     handler = new Handler(); 
    } 

    @Override 
    public void run() 
    { 
     while (true) 
     { 
      try 
      { 
       final String mensaje = b.readLine(); 
       Log.d("mensaje", mensaje); 
       handler.post(new Runnable() 
       { 
        public void run() 
        { 
         _et_ip.setText(mensaje); 
        } 
       }); 
      } 
      catch (IOException e) 
      { 
       throw new RuntimeException(e); 
      } 

     } 
    } 
} 

ソケット読み込みがブロックされていると仮定します。もちろん、無限ループがありますが、それはブロックされてから大したことではありません。私が示唆している唯一のことは、onPauseでそれをカットする方法を考え出すことです。

また、ここではAsyncTaskを忘れてしまいます。あなたが今までにしようとしていたことを正確に理解していない。スレッドは行く方法です。さて、私はサービスが行く方法だと思いますが、これはうまくいくでしょう。

+0

コードがアップしている、Thx – Jjreina

+0

提案kevinでありがとうございましたが、作業はありません、ログショー:11-03 18:47:06.077:W/dalvikvm (873):11-03 18:47:06.037:D/mensaje(873):mensaje0 threadid = 9:キャッチされない例外(グループ= 0x40015560)でスレッドが終了する – Jjreina

+0

完全なログ・ログを投稿してください。あなたのコメントにエラー情報はありません。データが適切に接続されている場合は、そのコードが機能するはずです。他の何かが(おそらく)失敗しています。 –

関連する問題