如何在另一个线程中设置文本Textview? (机器人)

时间:2016-11-24 07:23:50

标签: java android tcp

我有一个在线程中运行的TCP客户端。现在我从TCP服务器获取消息。消息保存为int变量。

在片刻我正在使用prinln方法查看消息。

但我想在GUI上显示它。我怎么能这样做?

3 个答案:

答案 0 :(得分:0)

有很多方法可以做到这一点。一种简单的方法是as-

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

了解更多信息,请参阅此内容 Android basics: running code in the UI thread

答案 1 :(得分:0)

使用runOnUiThread并在其中调用setText

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

答案 2 :(得分:0)

从线程更新UI。

  1. 您可以使用 runOnUiThread ,因为DAVIDBALAS1告诉您
  2. 您也可以使用处理程序,因为Vikash Kumar Verma告诉您,您也可以使用 sendMessage()来处理数据

    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 {

    @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. 您还可以使用 BroadcastReceiver 来更新UI(主要用于服务以从服务更新UI) 由我的这位朋友解释 - https://stackoverflow.com/a/14648933/4741746