1

我想要实现的目标如下 - 我有一个 java 类,它调用一个 URL(传递给它),它返回 JSON,它从处理数据的调用活动中调用一个回调。

这允许 aSyncTask 代码的可重用性。

在某些情况下,我需要将发布数据传递给被调用的 URL,因此我创建了一个新方法,允许我添加数据

HashMap<String, String> mData;        

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

然后我用我的 httprequest 传递这些数据。

我的问题如下。

我希望能够传递任何类型的数据。例如 HashMap .. 但我不能这样做,因为我在初始化 var 时必须指定位。

我可以创建一个 addHashMap 方法,但同样的问题出现在 var 被初始化为 String,String。

我将如何在允许传递任何数据形式的同时重用代码?

谢谢

4

2 回答 2

0

您可以在 Asynctask 类中使用类构造函数,向其传递 的 hashmap <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<>();

请注意,您不能传递原语,因此您必须将整数装箱等等。

请参阅有关 Java 泛型的本教程。

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

于 2012-12-12T18:02:30.510 回答