Android - 传递不同类型的数据

时间:2012-12-12 17:32:10

标签: android types android-asynctask

我想要实现的目标如下 - 我有一个调用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时会出现同样的问题。

如果允许传递任何数据表单,我将如何重用代码?

感谢

2 个答案:

答案 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