Android Volley将Array作为一个参数与String一起发送

时间:2018-04-23 13:39:42

标签: android android-volley

我正在使用Volley向服务器发送数据,在这里,我无法找到在单个请求中一次发送字符串和数组的方法。

我可以发送数组:

Map<String, List<String>> jsonParams = new HashMap<>();
jsonParams.put("names", my_names_list);

我也可以像以下一样发送字符串:

Map<String, String> jsonParams = new HashMap<>();
jsonParams.put("user_id", userId);

但是如何一次发送两个?

像:

Map<String, String> jsonParams = new HashMap<>();
jsonParams.put("user_id", userId);
jsonParams.put("names", my_names_list); // here it is expecting String but I want to send array of strings to server

预期的JSON请求应该是:

{
"user_id": "1",
"names" : ["abc, "cdf", "efg"]
}

4 个答案:

答案 0 :(得分:1)

我认为你可以将字符串和数组合并到一个json中,然后将json发送到server.Example

public class Member
{ 
  private String name;
  private List<String> skills;

  //getter and setter at lower
}

使用GSON库将此模型类设为json。

Member mem = createjsonobject();
Gson gson=new Gson();
String json=gson.toJson(mem);

//Pass this json to the server and at server side you can seperate the string and array  

private static Member createjsonObject()
{
  Member member= new Member();
  member.setName("Rishabh");

  List<String> skill=new ArrayList<>();
  skill.add("Java");
  skill.add("C#");
  skill.add("Android");

  member.setSkills(skill);
  return member;   

}

答案 1 :(得分:0)

我解决了我的问题 -

protected Map<String, String> getParams() throws AuthFailureError {
            JSONArray words_ar = new JSONArray();
            for(int i=0;i<exercise.getWord_list().size();i++){
                JSONObject word_ob = new JSONObject();
                try {
                    word_ob.put("id",(i+1)+"");
                    word_ob.put("learn",exercise.getWord_list().get(i).getLearn_str());
                    word_ob.put("native",exercise.getWord_list().get(i).getNative_str());
                    words_ar.put(word_ob);
                } catch (JSONException e) {
                    e.printStackTrace();
                }

            }
            Map<String, String> params = new HashMap<>();
            params.put("user", prefs.getUserId()+"");
            params.put("title", exercise.getTitle());
            params.put("words", words_ar+"");
            return params;
        }

答案 2 :(得分:0)

尝试使用自定义JSONObject。对于上面的示例请求,您可以创建一个JSON对象,如下所示

    try {
        String[] names = {"abc", "cdf", "efg"};
        String userId = "user_id";
        JSONArray jsonArray = new JSONArray();
        for(String n : names) {
            jsonArray.put(n);
        }

        JSONObject jsonParams = new JSONObject();
        jsonParams.put("names", jsonArray);
        jsonParams.put("userId", userId);
    } catch (JSONException e) {
        e.printStackTrace();
    }

答案 3 :(得分:0)

尝试这个;将名称放在数组中:

CKRecord

for(int i = 0;i<yourArrayLength;i++){

params.put("names"+i, my_names_list[i]);

希望它会有所帮助