Android Volley Post с параметрами Map‹String, Object› (?)

Я пытался опубликовать свой класс Credentials с Android на веб-сервер С#.Net.

Метод Volley Post принимает такие параметры, как:

@Override
    protected Map<String, String> getParams() throws AuthFailureError {
        return parameters;
    }

Тип возвращаемого значения getParams()Map<String, String>, но мне нужно Map<String, Object>, чтобы отправить мой класс на веб-сервер. Я даже пытался преобразовать свой класс в строку json, например:

@Override
    protected Map<String, String> getParams() throws AuthFailureError {
        Map<String, String> parameters = new HashMap<String, String>();
        parameters.put("credentials", new Gson().toJson(mCredentials, Credentials.class));
        return parameters;
    }

Но это не работает. Сервер возвращает ошибку «Недопустимый параметр», которая возникает, когда параметр «учетные данные» имеет значение null.

На стороне сервера нет ничего плохого, потому что я смог сделать это с AsyncTask. Я решил превратить свои запросы в Volley и застрял на этой проблеме.

У кого-нибудь есть решение?


person JustWork    schedule 23.04.2014    source источник
comment
возможный ответ в вопросе SO вопросы/29779447/   -  person TommySM    schedule 22.04.2015


Ответы (2)


Вот как я это делаю (примечание: params — это jsonobject, а не карта):

 //fill params
 JSONObject params = new JSONObject();
 params.put("username", username);
 params.put("password", password);

 //create future request object
 RequestFuture<JSONObject> future = RequestFuture.newFuture();
 //create JsonObjectRequest
 JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.POST, URL, params, future, future);
 //add request to volley
 MyVolley.getRequestQueue().add(jsObjRequest);
 //pop request off when needed
 try {
            JSONObject response = future.get();//blocking code
            } catch (Exception e) {
            e.printStackTrace();
     }
person FriendlyMikhail    schedule 29.04.2014

Если вам нужно, чтобы ваш пакет отправлял что-то вроде объекта, вы можете поместить JSONObject в JSONObject. Например

JSONObject outer = new JSONObject();
JSONObject inner = new JSONObject();
inner.put("first_name","James");
inner.put("last_name","Bond");
outer.put("person",inner);
outer.put("id","1");
person the4960    schedule 20.08.2014