我的代码是这样的
String url = "http://192.168.10.10/post/data.php";
StringRequest postRequest = new StringRequest(Request.Method.POST, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject jsonResponse = new JSONObject(response).getJSONObject("respond");
String codeid = jsonResponse.getString("CodeID");
Log.d("CodeID", codeid);
} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
}
) {
@Override
protected Map<String, String> getParams()
{
Map<String, String> params = new HashMap<>();
ArrayList<Product> product = dataSource.getAllProduct();
for (Product bk : product) {
params.put("code1", bk.getCode1());
params.put("code2", bk.getCode2());
}
return params;
}
};
Volley.newRequestQueue(this).add(postRequest);
我在数据库中有数据(大约10行),并希望通过post发送所有行。使用上面的代码我可以发送POST但只有1行。
我尝试过使用
for (int i=0; i<=product.size(); i++ )
{
}
替代
for (Product bk : product)
仍然没有运气。你能告诉我如何解决这个问题吗?
答案 0 :(得分:0)
您使用的是HashMap,这有点像键值对。
迭代product
时,您正在为相同的键("code1"
和"code2"
)分配新值。所以你的网址可能是正确的,但你的params总是被覆盖。
调试代码时,您应该注意到params
最多有2个项目
你也可以试试这个:
for (int i = 0; i <= product.size(); i++) {
Product myProduct = product.get(i);
params.put("product" + i + "_code1", myProduct.getCode1());
params.put("product" + i + "_code2", myProduct.getCode2());
}
但这不是一个很好的方法。
你可能会更好:
ArrayList<Product> products = dataSource.getAllProduct();
Map<String, String> params = new HashMap<>();
for (int i = 0; i <= products.size(); i++) {
Product product = products.get(i);
String key = "product" + i;
String value = URLEncoder.encode("code1=" + product.getCode1() + "&" +
"code2=" + product.getCode2(), "UTF-8");
params.put(key, value);
}
return params;
URLEncoder.encode
将对您的产品进行urlencode-String。这是必需的,因为网址可能会被所有&
弄乱。对于编码,这些将是&
你需要在另一端再次decode
他们!
答案 1 :(得分:0)
我遇到了类似的问题。我将所有的arraylist放在一个单独的java文件Common中并从那里获取并将其放入一个新的arraylist。在服务器端我有一个JSON数组接受键的多个值这应该适用于你们都很好。
{
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String,String> params = new HashMap<String,String>();
ArrayList<String> arrayList=new ArrayList<>();
ArrayList<String> arrayList2=new ArrayList<>();
for(String s : Common.myProduct1){//myProduct1 has ur contents for getCode1()
arrayList.add(s);
}
for(String s: Common.myProduct2){//myProduct2 has ur contents for getCode2()
arrayList2.add(s);
}
Log.v("Params:",params.toString());
params.put("key1",arrayList.toString().replace("[","".replace("]","")));
params.put("key2",arrayList2.toString().replace("[","".replace("]","")));
return params;
}
};