从消息到Android处理程序获取返回数据

从消息到Android处理程序获取返回数据,android,handler,Android,Handler,今天,我将向处理程序发送一些数据,以便对OpenFeint方法进行非静态调用。在返回点之前,一切都很好,我不知道如何检索信息 主类中的方法调用: public static float getPercentageAchievement(String idAchievement) { Message msg = new Message(); msg.what = OpenFeintXHandler.GET_PERCENTAGE_ACHIEVEMENT; Bundle arg

今天,我将向处理程序发送一些数据,以便对OpenFeint方法进行非静态调用。在返回点之前,一切都很好,我不知道如何检索信息

主类中的方法调用:

public static float getPercentageAchievement(String idAchievement) {
    Message msg = new Message();
    msg.what = OpenFeintXHandler.GET_PERCENTAGE_ACHIEVEMENT;
    Bundle args = new Bundle();
    args.putString(BUNDLE_ARG_1, idAchievement);
    msg.setData(args);
    ms_kOpenFeintHandler.sendMessage(msg);
    return msg.getData().getFloat(BUNDLE_RETURN); // msg is empty here
}
处理程序类中的消息处理:

case GET_PERCENTAGE_ACHIEVEMENT:
        msg.getData().putFloat(
                OpenFeintX.BUNDLE_RETURN,
                otherGetPercentageAchievement(msg.getData().getString(
                        OpenFeintX.BUNDLE_ARG_1)));
        break;
private float otherGetPercentageAchievement(String idAchievement) {     
    return 200;
}
处理程序类中的测试方法:

case GET_PERCENTAGE_ACHIEVEMENT:
        msg.getData().putFloat(
                OpenFeintX.BUNDLE_RETURN,
                otherGetPercentageAchievement(msg.getData().getString(
                        OpenFeintX.BUNDLE_ARG_1)));
        break;
private float otherGetPercentageAchievement(String idAchievement) {     
    return 200;
}

但是为什么您坚持要在消息中接收返回值呢? 假设消息是异步发送的,因此可以在处理程序中设置值之前执行return语句

我会:

String data=otherGetPercentageAchievement(msg.getData().getString(OpenFeintX.BUNDLE_ARG_1));
//use the data directly in the handler...set a variable in other class or whatever you want to do here.

可以用这种格式设置数据

在设置数据时

Message msg = new Message();
msg.obj = data which you want to set // for object data
Msg.arg1  = data which you want to set // for integer data
String data = (String) msg.obj; // If object is of String
int integerData = msg.arg1;
在获取数据时

Message msg = new Message();
msg.obj = data which you want to set // for object data
Msg.arg1  = data which you want to set // for integer data
String data = (String) msg.obj; // If object is of String
int integerData = msg.arg1;

msg.arg1
一次只传递一个数据。您也可以在
msg.arg2
中传递数据。它们都是整数类型

编辑以澄清问题。这是处理程序类中同名的另一个方法。您阅读了代码吗?我已经在这样做了,现在不工作了。Arg1和arg2仅对int参数.msg.getData().putFloat(OpenFeintX.BUNDLE_返回,otherGetPercentageAchization(msg.getData().getString(OpenFeintX.BUNDLE_ARG_1))有效;你在做什么?我的想法是将返回值存储在消息包中,以便从另一个方法检索它,但当消息被发送到处理程序时,它似乎已被清除。只需划分调用方法OtherGetPercentageAchization()的过程并将数据存储回msgdid中。如果是,请修复此问题,并告诉我您是如何解决的。thanksI完全停止使用处理程序。那时您使用了什么方法