Как я могу изменить свой код, чтобы я мог добавить параметр body к запросу post - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть проект, в котором у меня есть несколько URL, каждый из которых ведет к конечной точке.Я подключился к этим конечным точкам через почтовый запрос с JSON, в который мне нужно вставить параметр (например: «email»: «mail@etc.com»), чтобы получить токен, который я добавлю в телоследующий запрос конечной точки, к которой я хочу подключиться.

Я пытался использовать addRequestProperty () и setRequestProperty (), и я не могу понять, что не так.В журнале оказывается, что я получаю внутреннюю ошибку сервера (код 500) при попытке сделать http-запросы.

У меня есть конечная точка, в которую мне не нужно передавать какие-либо параметры, и она прекрасно работает, предоставляя список «вещей», каждый из которых имеет идентификатор в своем JSON-результате от конечной точки.Затем мне нужно взять каждый идентификатор, чтобы, когда я нажимал на «материал» из списка на экране, называлась другая конечная точка, предоставляющая мне результаты с деталями этого «материала» в другом действии - для этой конечной точки мне нужно было передать любуюitem Я нажимаю на его конкретный идентификатор, взятый из более раннего результата JSON.

частная статическая строка makeHttpRequestGetUser (URL-адрес URL) выдает IOException {

    String jsonResponse = "";

    if(url == null)
        return jsonResponse;

    HttpURLConnection urlConnection = null;
    InputStream inputStream = null;
    try {
        urlConnection = (HttpURLConnection) url.openConnection();
        urlConnection.setReadTimeout(10000);
        urlConnection.setConnectTimeout(15000);
        //urlConnection.setRequestProperty("Content-Type", "application/json");
        urlConnection.addRequestProperty("email", "t1@gmail.com");
        urlConnection.setRequestMethod("POST");
        urlConnection.connect();

        if(urlConnection.getResponseCode() == 200) {
            inputStream = urlConnection.getInputStream();
            jsonResponse = readFromStream(inputStream);
        } else {
            Log.e(TAG, "Error response code in GetUser request: " + urlConnection.getResponseCode());
        }
    } catch (IOException e) {
        Log.e(TAG, "Problem retrieving the "stuff" JSON result.", e);
    } finally {
        if(urlConnection != null)
            urlConnection.disconnect();
        if(inputStream != null)
            inputStream.close();
    }

    return jsonResponse;
}

частная статическая строка extractTokenFromJson (String spotJSON) {

    if(TextUtils.isEmpty(spotJSON))
        return null;

    String tokenValue = "";

    try {
        JSONObject baseJsonResponse = new JSONObject(spotJSON);
        JSONObject result = baseJsonResponse.getJSONObject("result");
        tokenValue = result.getString("token");

    } catch (JSONException e) {
        Log.e(TAG, "Problem parsing the token", e);
    }

    return tokenValue;
}

1 Ответ

0 голосов
/ 23 апреля 2019

Во-первых, почему вы не используете библиотеку Volley (рекомендованную Google) для связи с вашими остальными API? Если вы решили изменить его на залп, запустите его здесь: Volley Library для Android и сделайте его проще с небольшим классом, который я написал до VolleyWebClient , вам просто нужно добавить его в свой проект и наслаждаться.

Но для вашего собственного кода я думаю, что ошибка 500 в ответе показывает, что тип содержимого вашего запроса отсутствует. обычно, чтобы получить токен, вы можете использовать Form-type-type так:

setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

Хотелось бы, чтобы это помогло вам и спасло ваш день.

...