【发布时间】:2012-07-24 10:00:53
【问题描述】:
我在更新TextView 时遇到问题,我使用 Handler 方法将消息传递到 UI。我的应用程序接收数据(整数类型)真正的 io 流并显示在 TextView 中。
我的 Activity 类如下所示:
public class DeviceView extends Activity {
TextView dataX;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.device_view);
dataX = (TextView) findViewById(R.id.datax);
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
dataX.setText(String.valueOf(msg.arg1));
}
};
}
}
我还有一个单独的类,它扩展了 Thread:
public class IOThread extends Thread {
public void run() {
byte[] buffer = new byte[1024];
int data;
while (true) {
try {
data = in.read(buffer);
Message message= Message.obtain();
message.arg1= data;
DeviceView.handler.sendMessage(message);
} catch (IOException ex) {
break;
}
}
}
}
我是否必须创建一个单独的变量类型String 并将其指向变量数据并最后调用计数?这足以更新TextView吗?
【问题讨论】:
-
您的代码看起来不错。它会给你一个错误信息吗?
-
你能验证你是通过 Handler 接收消息吗?
-
是的,我可以发送和接收数据,并且从处理程序接收数据也可以,它将数据设置到 textView 仅最后接收到的数据(整数)。服务器端应用程序发送从 1 到 20 个真实 I/O 的随机数,此时我的 android 应用程序只打印最后一个数字 20。所以我的问题是我必须在哪里调用方法 handler.postDelay(this, 1000);推迟 quea,这是否足够?那是解决方案吗?还是我必须做的更多?