Android处理程序:发送8条不同的消息:处理程序找到8条消息但只使用了最后一条消息

Zip*_*NFC 1 android message view handler

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

问题是我发送了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();
}
Run Code Online (Sandbox Code Playgroud)

}

此代码的结果如下所示:

在此输入图像描述

Ali*_*our 8

对于通过处理程序发送数据,您可以使用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();
Run Code Online (Sandbox Code Playgroud)