#android #json #post #httprequest #internal-server-error
#Android #json #Публикация #httprequest #внутренняя ошибка сервера
Вопрос:
У меня есть проект, в котором у меня есть несколько URL-адресов, каждый из которых ведет к конечной точке. У меня есть подключение к этим конечным точкам через запрос post с JSON, в который я должен вставить параметр (т. Е.: «электронная почта»:»mail@etc.com «), чтобы получить токен, который я помещу в тело следующего запроса конечной точки, к которой я хочу подключиться.
Я попытался использовать addRequestProperty() и setRequestProperty() и я не могу понять, что не так. В журнале появляется сообщение об ошибке внутреннего сервера (код 500) при попытке выполнить http-запросы.
У меня есть конечная точка, которой мне не нужно передавать какие-либо параметры, и она отлично работает, предоставляя список «вещей», каждый из которых имеет идентификатор в своем результате JSON от конечной точки. Затем я должен использовать каждый идентификатор, поэтому, когда я нажимаю на «материал» из списка на экране, вызывается другая конечная точка, предоставляющая мне результаты с деталями этого «материала» в другом действии — для этой конечной точки мне нужно передать для любого элемента, который я нажимаю, его конкретный идентификатор, взятый из более раннего результата 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 (строка 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:
Во-первых, почему вы не используете библиотеку Volley (рекомендованную Google) для взаимодействия с вашими rest API? Если вы решили изменить его на volley, запустите его здесь: Библиотека Volley для Android и упростите его с помощью небольшого класса, который я написал доVOLLEWEBCLIENT, вам просто нужно добавить его в свой проект и наслаждаться.
Но для вашего собственного кода, я думаю, ошибка 500 в ответе показывает, что тип содержимого вашего запроса отсутствует. обычно для получения токена вы можете использовать тип содержимого формы, подобный этому:
setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
Я хочу, чтобы это помогло вам и спасло ваш день.
Комментарии:
1. Привет, Раваи! Спасибо, что нашли время ответить! Я посмотрю на библиотеку Volley и попытаюсь изменить ее, если это проще. Также спасибо за отзыв о моем коде!