1

私が達成しようとしているのは次のとおりです-URLを呼び出す(渡される)Javaクラスがあり、JSONを返します。これは、データを処理する呼び出しアクティビティ内からコールバックを呼び出します。

これにより、aSyncTaskコードの再利用が可能になります。

場合によっては、呼び出されているURLに投稿データを渡す必要があったため、データを追加できる新しいメソッドを作成しました

HashMap<String, String> mData;        

public void AddDataToPost(HashMap<String, String> data) {
        mData = data;
     }

次に、このデータをhttprequestで渡します。

私の質問は次のとおりです。

あらゆるタイプのデータを渡すことができるようにしたい。たとえば、HashMap ..ですが、変数を初期化したときにビットを指定する必要があるため、これを行うことはできません。

addHashMapメソッドを作成することもできますが、varがString、Stringとして初期化されるときに同じ問題が発生します。

データフォームの受け渡しを許可しながら、コードを再利用するにはどうすればよいですか?

ありがとう

4

2 に答える 2

0

Asynctaskクラスでクラスコンストラクターを使用して、のハッシュマップを渡すこと<String, Object>ができます。これは、Asynctaskのどこでも使用できます。

public class MyTask extends AsyncTask<String, Void, String>
{
    private Map<String, Object> myMap;
    private String myString;

    public MyTask(Map<String, Object> myMap, String myString) {
        this.myMap = myMap;
        this.myString = myString;
    }
    @Override
    protected Void doInBackground(String... params) {
        //do stuff with params and myMap
    }
}

MainActity.java:

Map<String, Object> myMap = new HashMap<String, Object>();
//Add stuff to myMap
new MyTask(myMap, "mystring").execute();
于 2012-12-12T17:42:07.633 に答える
0

生の型を使用するようにクラスを定義できます。

public MyClass<T>{
   ...
}

次に、これを行うことができます:

MyClass<Integer> intMyClass = new MyClass<>();

MyClass<String>  strMyClass = new MyClass<>();

ただし、プリミティブを渡すことはできないため、整数などをボックス化する必要があることに注意してください。

JavaGenericsに関するこのチュートリアルを参照してください。

http://docs.oracle.com/javase/tutorial/java/generics/types.html

于 2012-12-12T18:02:30.510 に答える