我想要实现的目标如下 - 我有一个调用URL(传递给它)的java类,它返回JSON,它从处理数据的调用活动中调用一个回调。
这允许aSyncTask代码的可重用性。
在某些情况下,我需要将帖子数据传递给被调用的URL,因此我创建了一个允许我添加数据的新方法
HashMap<String, String> mData;
public void AddDataToPost(HashMap<String, String> data) {
mData = data;
}
然后我用我的httprequest传递这些数据。
我的问题如下。
我希望能够传递任何类型的数据。例如HashMap ..但我不能这样做,因为我在初始化var时要指定位。
我可以创建一个addHashMap方法,但是当var初始化为String,String时会出现同样的问题。
如果允许传递任何数据表单,我将如何重用代码?
感谢
答案 0 :(得分: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();
答案 1 :(得分:0)
您可以定义您的类以使用原始类型,例如
public MyClass<T>{
...
}
然后你可以这样做:
MyClass<Integer> intMyClass = new MyClass<>();
MyClass<String> strMyClass = new MyClass<>();
请注意,您无法传递基元,因此您必须使用整数等等。
请参阅有关Java Generics的本教程。
http://docs.oracle.com/javase/tutorial/java/generics/types.html