gpt4 book ai didi

安卓处理程序 : Send 8 different messages: handler finds 8 messages but only used the last message

转载 作者:行者123 更新时间:2023-11-29 14:23:10 25 4
gpt4 key购买 nike

我是 Android 的新手,发现要不断更新主视图,我必须创建一个线程来处理各种进程,然后将更新传回主视图。我决定使用 Handler 类来执行此操作。此示例中的 View 有一个用于激活代码的按钮和一个用于显示收到的消息的表格布局 - 表示流程的一个阶段。

问题是我发送了 8 条不同的消息,我可以在处理程序中看到 8 条消息返回,但所有 8 条消息的内容都与消息 8 相同。

我期待处理程序按顺序接收消息。

任何关于更好的方法的建议总是欢迎学习。

代码如下:

`

public class messageHandlerTest extends Activity {

protected TextView textView;
protected Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
String[] status = (String[]) msg.obj;
createTableRow(status);
Log.e("Got a new message",status[0]+":"+status[1]);
}
};

Button btnStartProgress;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.statusText);
textView.setText("");
//Getting response from server with Network SSID and Password

Button connectButton = (Button)findViewById(R.id.connectButton);
addListenerOnButton();
} // End of create

protected class connectWiFi extends Thread implements Runnable {
//tokens1 = new String[0];
public void run(){
try {
String[] messageString = new String[2];
Message message = handler.obtainMessage();
messageString[0]="OK";
messageString[1]="Number 1";
message.obj = messageString;
handler.sendMessage(message);

message = handler.obtainMessage();
messageString[0]="OK";
messageString[1]= "Number 2";
message.obj = messageString;
handler.sendMessage(message);
message = handler.obtainMessage();
messageString[0]="OK";
messageString[1] = "Number 3";
message.obj = messageString;
handler.sendMessage(message);
message = handler.obtainMessage();
messageString[0]="OK";
messageString[1] = "Number 4";
message.obj = messageString;
handler.sendMessage(message);

message = handler.obtainMessage();
messageString[0] = "OK";
messageString[1] = "Number 5";
message.obj = messageString;
handler.sendMessage(message);

message = handler.obtainMessage();
messageString[0] = "OK";
messageString[1] = "Number 6";
message.obj = messageString;
handler.sendMessage(message);

message = handler.obtainMessage();
messageString[0] = "OK";
messageString[1] = "Number 7";
message.obj = messageString;
handler.sendMessage(message);

message = handler.obtainMessage();
messageString[0] = "OK";
messageString[1] = "Number 8";
message.obj = messageString;
handler.sendMessage(message);

} catch (Exception e) {
e.printStackTrace();
Log.e("Exception found","bugger");
}
}// End or run
}// End of class

public void addListenerOnButton() {

btnStartProgress = (Button) findViewById(R.id.connectButton);
btnStartProgress.setOnClickListener(
new OnClickListener() {
@Override
public void onClick(View v) {
connectWiFi connectwifi = new connectWiFi();
connectwifi.start();
}

});

}
private void createTableRow(String[] stage) {
TableLayout tl = (TableLayout) findViewById(R.id.statusTable);
TableRow tr = new TableRow(this);
LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
tr.setLayoutParams(lp);
tr.setBackgroundColor(0xFFFFFFFF);
TextView tvStatus = new TextView(this);
tvStatus.setLayoutParams(lp);
tvStatus.setPadding(2,1,1,2);
tvStatus.setTextColor(0xFF000000);
tvStatus.setText(stage[0]); // Status
TextView tvStage = new TextView(this);
tvStage.setLayoutParams(lp);
tvStage.setPadding(2,1,1,2);
tvStage.setTextColor(0xFF000000);
tvStage.setText(stage[1]); // Stage
tr.addView(tvStatus);
tr.addView(tvStage);
tl.addView(tr, new TableLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
}
@Override
protected void onDestroy() {
super.onDestroy();
}

这段代码的结果如下:

enter image description here

最佳答案

要通过处理程序发送数据,您可以使用 bundle 作为要发送给处理程序的消息对象的数据。像这段代码:

// receieve message in handleMessage method of handler 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");
...
}
};

// Sending message in a background thread
new Thread(new Runnable() {
@Override
public void run() {
final Message msg = new Message();
final Bundle b = new Bundle();
Integer value = 1;
b.putInt("KEY", value);
msg.setData(b);
handler.sendMessage(msg);
}
).start();

关于安卓处理程序 : Send 8 different messages: handler finds 8 messages but only used the last message,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18276060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com