2

有人可以向我解释如何使用switchwhat字段来确定要执行的代码。此外,如何创建要在开关中使用的消息 obj 也很棒。

我的处理程序代码示例:

Handler uiHandler = new Handler(){
    public void handleMessage(Message msg){
        switch(msg.what){

        }
    }
};
4

2 回答 2

4

如果您正在使用处理程序,我假设您想在不同的线程中做一些工作,并使用处理程序来与您正在启动的线程和主线程进行黑白通信。举个例子:

private static final int SUCCESS = 0;
private static final int FAIL = 1;

//This is the handler
Handler uiHandler = new Handler(){
    @Override
    public void handleMessage(Message msg){
        //Here is how you use switch statement
        switch(msg.what){
        case SUCCESS:
            //Do something      
            break;
        case FAIL:
            //Do something
            break;
        }

    }
};

//Here is an example how you might call it
Thread t = new Thread() {
    @Override
    public void run(){
        doSomeWork();
        if(succeed){
            /*we can't update the UI from here so we'll signal our handler 
             and it will do it for us.*/
            // 'sendEmptyMessage(what)' sends a Message containing only the 'what' value.
            uiHandler.sendEmptyMessage(SUCCESS);
        }else{
            uiHandler.sendEmptyMessage(FAIL);
        }
    }   
}

归功于这两个线程:它们可能是一本不错的读物: Android:我什么时候应该使用 Handler(),什么时候应该使用线程?& Android 处理程序操作未处理

希望这可以帮助。

于 2013-06-23T03:35:45.340 回答
0
    @Override
    public void handleMessage(Message msg) {
        switch (msg.what) {             
        case SECOND_VALUE:
            String s = (String) msg.obj;  // if msg.obj is a string
            break;

        case FIRST_VALUE:
            AnotherObject = (AnotherObject) msg.obj;   // if it is another object
            break;

        default:
            super.handleMessage(msg);
        }
    }
于 2013-06-23T03:39:23.340 回答