1

私の Android プロジェクトでは、送信されたフォーム データのマップを、メインの Activity クラスから asyncTask を拡張する 2 番目のクラスに送信しようとしています。

私の主な活動には、次のコード スニペットがあります。

Map<String, String> formData = new HashMap<String, String>();
formData.put("name", formName.getText().toString());
formData.put("test", "TESTING");

//formData.get("name"); - this test works

Connection connection = new Connection();
connection.execute(formData);

これにより、データのマップが設定され、最初の要素が正常にテストされ、別のスレッドでそのデータの処理を担当するクラスにフォーム データが送信されます。

しかし、私の非同期クラスでは、次のスニペットを使用しています。

public class Connection extends AsyncTask<Map, Void, Void> {
    @Override
    protected Void doInBackground(Map... data) {
        // TODO Auto-generated method stub
        Log.i("TEST", "NEW THREAD FIRING !!!");
        Log.d("DATA", data.get("name"));

        return null;
    }

}

私の 2 番目のログ呼び出しは、配列マップの名前要素を抽出しようとしていますが、「データ」オブジェクトは、渡したマップとして認識されません。

4

1 に答える 1

1

このdoInBackground()メソッドはvarargsパラメーターを取り込んでいます。つまり、一度に複数のタイプを渡すことができます。

この場合、複数のマップが渡される可能性があります。この場合も、実際に渡されるのは1つだけです(これは、AsyncTaskのexecuteメソッドを介して呼び出しを開始しているためです)。...メソッドシグネチャのに注意してください。Mapこれは、複数のオブジェクトを渡すことができることを意味します。

Connection connection = new Connection();
connection.execute(formData1, formData2, formData3);

array他のオブジェクトと同じように、つまりインデクサーを使用して、内部の値にアクセスします。

コードを次のように変更すると、機能するはずです。

@Override
protected Void doInBackground(Map... data) {
    // TODO Auto-generated method stub
    Log.i("TEST", "NEW THREAD FIRING !!!");
    Map myMap = data[0];
    Log.d("DATA", myMap.get("name"));

    return null;
}
于 2012-06-03T12:50:17.683 に答える