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.arg1msg.arg2一度に1つのデータのみを渡します。両方とも整数型のデータを渡すこともできます。

于 2012-05-04T11:10:25.377 に答える
1

しかし、なぜメッセージで戻り値を受け取ることを主張するのですか?メッセージは非同期で送信されるため、ハンドラーに値が設定される前に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.
于 2012-05-04T11:09:06.957 に答える