【问题标题】:how to use switch-case with handleMessage interface如何使用带有handleMessage接口的switch-case
【发布时间】:2015-11-13 08:19:06
【问题描述】:

我想知道在使用handleMessage 接口时如何使用switch-case。如下代码所示,在 run() 方法中,我发送不同的消息,而 我只有一个带有 handleMessage() 接口的处理程序,我想知道如何使用 switch-case 来处理发送的不同消息

在 onCreate 中

private void initObjs() {
    Log.w(TAG, CSubTag.bullet("initObjs"));

    this.mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
        ..
        ..
        }
    };
}

在运行()中

public void run() {

        //initiating connection
        BluetoothSocket rfcSocket = mSPPCtrl.rfcConnect();
        if (rfcSocket.isConnected()) {
            Message msg = mHandler.obtainMessage();
            Bundle b = new Bundle();
            b.putString("CONNECTED", "RFC-SOCKET CONNECTED");
            msg.setData(b);
            mHandler.sendMessage(msg);
            //assigning stream variables
            try {
                this.mRFCOS = rfcSocket.getOutputStream();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                this.mRFCIS = rfcSocket.getInputStream();
            } catch (IOException e) {
                e.printStackTrace();
            }

        } else {
            Message msg = mHandler.obtainMessage();
            Bundle b = new Bundle();
            b.putString("DISCONNECTED", "RFC-SOCKET NOT CONNECTED");
            msg.setData(b);
            mHandler.sendMessage(msg);
        }

【问题讨论】:

    标签: android handler android-handler


    【解决方案1】:
    1. 在sendMessage(msg)之前,给msg.what一个int值,比如0,1,2...

    2. 在handleMessage()中,使用swith case;

    【讨论】:

    • 你能用示例代码澄清一下吗?因为我不知道如何分配给 msg.what a value
    • { 消息消息 = mHandler.obtainMessage();捆绑 b = 新捆绑(); if (rfcSocket.isConnected()) { b.putString("CONNECTED", "RFC-SOCKET CONNECTED"); msg.what = 0; } else { b.putString("DISCONNECTED", "RFC-SOCKET NOT CONNECTED"); msg.what = 1; } msg.setData(b); mHandler.sendMessage(msg); }
    【解决方案2】:

    定义消息常量,如

    public static final int STATE_CONNECTED = 1;
    public static final int STATE_DISCONNECTED = 2; 
    

    处理程序:

    @Override
    public void handleMessage(Message msg) {
        switch(msg.what) {
            case STATE_CONNECTED:
              //do your stuff
              break;
            case STATE_DISCONNECTED:
               //do your stuff
               break;
            default : 
               //default condition
               break;
        }
    }
    

    在运行()中

    public void run() {
            ...
            if (rfcSocket.isConnected()) {
                Message msg = mHandler.obtainMessage(STATE_CONNECTED);
                ...
    
            } else {
                Message msg = mHandler.obtainMessage(STATE_DISCONNECTED);
                ...
            }
    }
    

    【讨论】:

    • 如何将 msg.what 分配给值 1 或 2
    • 在getMessage()中传入
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-21
    • 1970-01-01
    • 1970-01-01
    • 2022-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多