nameValuePair数组的数值等价列表?

时间:2010-06-22 09:15:18

标签: java php http

我正在处理双打,并寻找相当于“双倍”的......

ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("lat",lat));
nameValuePairs.add(new BasicNameValuePair("lng",lng));

编辑//我正在发出HTTP请求,我认为需要将lat值映射到php lat变量,将long映射到php变量。

谢谢!

5 个答案:

答案 0 :(得分:3)

如果必须使用NameValuePair,则有两种可能的解决方案。

您可以将Map转换为List NameValuePair

List<NameValuePair> convertParameters(Map<String, Double> parameters) {
    List<NameValuePair> result = new ArrayList<NameValuePair>();

    for (Entry<String, Double> entry : parameters.entrySet()) {
        result.add(new BasicNameValuePair(entry.getKey(), entry.getValue().toString()));
    }

    return result;
}

或者您可以实现一个新的NameValuePair来处理Double值:

public class DoubleNameValuePair implements NameValuePair {

    String name;

    double value;

    public DoubleNameValuePair(String name, double value) {
        this.name = name;
        this.value = value;
    }

    @Override
    public String getName() {
        return name;
    }

    @Override
    public String getValue() {
        return Double.toString(value);
    }

}

在后一种情况下,您可以使用NameValuePair的List,它可以直接传递给UrlEncodedFormEntity的构造函数:

List<NameValuePair> parameters = new ArrayList<NameValuePair>();
parameters.add(new DoubleNameValuePair("lat", 1.0));
parameters.add(new DoubleNameValuePair("lng", 2.0));

答案 1 :(得分:1)

AbstractMap.SimpleEntry是表示通用元组的JDK类。不幸的是,它是一个内部类,使得它的使用非常非常冗长(特别是一旦你使用了类型参数)。此外,使用double值需要它们(可能使用自动装箱),这会增加额外开销。

您可能想要编写自己的StringDoublePair课程 - 这并不困难。

答案 2 :(得分:1)

为什么不使用地图?

Map<String, Double> nameValuePairs = new HashMap<String, Double>();
nameValuePairs.put("lat", lat);
nameValuePairs.put("lng", lng);

答案 3 :(得分:1)

喜欢这样吗?

ArrayList<double[]> latLons = new ArrayList<double[]>();
latlons.add(new double[]{60.0, 20.0});

答案 4 :(得分:0)

我假设你在谈论Apache HttpClient中使用的NameValuePair。值必须是字符串。您必须将其转换为String。

这就是我的工作,

ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("lat",""+lat));
nameValuePairs.add(new BasicNameValuePair("lng",""+lng));