2016-11-24 9 views
0

私はスレッドで実行しているTCPクライアントを持っています。今私はTCPサーバーからメッセージを取得しています。メッセージはint変数として保存されます。別のスレッドでテキストビューを設定する方法は? (Android)

私は瞬間に、メッセージを見るためにprinlnメソッドを使用しています。

しかし、私はGUIでそれを示したいと思います。どうやってやるの?

+1

グーグルを試してみましたか? – SilentKiller

+0

runonuithreadメソッドを使用してスレッドからUIにアクセスするか、ハンドラメッセージを使用してスレッドを実行します。 –

+0

はい私はグーグルを試みて、私はまた、ここでいくつかのソリューションをstackoverflowで試したが、まだ動作しませんでした。 – mosambers

答えて

0

これを実行する方法は多数あります。これを行う1つの簡単な方法は、この Android basics: running code in the UI thread

+0

どこで使用しますか?それは私のTCPのrun()では動作しますが、それのousideではありません.. – mosambers

+0

上記のコードをrun()メソッドの中に書くことができます。私はより良い説明ができるようにコードを投稿してください。 –

0

使用runOnUiThreadを参照し、内部setTextを呼び出す詳細は

new Handler().post(new Runnable() { 
    @Override 
    public void run() { 
     // Code here will run in UI thread 
    } 
}); 

AS-です。

runOnUiThread(new Runnable() { 
      @Override 
       public void run() { 
        a.setText("text"); 
     } 
}); 
0

スレッドをUIから更新します。

  1. DAVIDBALAS1はVikashクマーバーマは、あなたものsendMessageを(useingしてデータを送信することができますあなたに言ったとしても、あなたが

    のように処理するために)
    ハンドラを使用することができます
  2. あなたに言ったとして、あなたは runOnUiThreadを使用することができます
    new Thread(new Runnable() { 
        @Override 
        public void run() { 
    
         final Message msg = new Message(); 
         final Bundle b = new Bundle(); 
         b.putInt("KEY", value); 
         msg.setData(b); 
         handler.sendMessage(msg);  
        } 
    ).start(); 
    
    
    
    
    // Handle Message in handleMessage method of your controller (e.g. on UI  thread) 
    handler = new Handler() { 
        @Override 
        public void handleMessage(Message msg) { 
         Bundle b = msg.getData(); 
         Integer value = b.getInt("KEY"); 
    
         textView.setText(""+value); 
        } 
    }; 
    
  3. asynctaskのように

    プライベートクラスLongOperationがAsyncTaskあなたも私のこの友人が説明したようUI(主にサービスからUIを更新するためのサービスで使用される) を更新するBroadcastReceiverを使用することができます{

    @Override 
    protected String doInBackground(String... params) { 
        for (int i = 0; i < 5; i++) { 
         try { 
    
         //Perform long running task here and 
          Thread.sleep(1000); 
         } catch (InterruptedException e) { 
          Thread.interrupted(); 
         } 
        } 
        return "Executed"; 
    } 
    
    @Override 
    protected void onPostExecute(String result) { 
    
        //here you can update UI this work on UI thread 
        TextView txt = (TextView) findViewById(R.id.output); 
        txt.setText("Executed"); // txt.setText(result); 
        // might want to change "executed" for the returned string passed 
        // into onPostExecute() but that is upto you 
    } 
    
    @Override 
    protected void onPreExecute() {} 
    
    @Override 
    protected void onProgressUpdate(Void... values) {} 
    

    }

  4. を拡張 - https://stackoverflow.com/a/14648933/4741746

関連する問題