4

今天,我将一些数据发送到处理程序,以对 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;
}
4

2 回答 2

6

您可以以这种格式设置数据

设置数据时

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它们都是整数类型

于 2012-05-04T11:10:25.377 回答
1

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

我会做:

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.
于 2012-05-04T11:09:06.957 回答