我有一个项目,其中有一些URL,每个URL都指向一个端点。我已经通过带有JSON的发布请求连接到了这些端点,我必须在其中插入参数(即:“ email”:“ mail@etc.com”),以便获得要放入主体的令牌。我要连接的端点的下一个请求。
我尝试使用addRequestProperty()和setRequestProperty(),但我不知道出了什么问题。在日志中,似乎在尝试发出http请求时收到内部服务器错误(代码500)。
我有一个端点,我不必向其传递任何参数,并且可以正常工作,提供了一个“东西”列表,每个东西在该JSON结果中都有一个ID。然后,我必须获取每个id,因此,当我从屏幕上的列表中单击“材料”时,称为另一个端点,该端点在另一个活动中为我提供带有“材料”详细信息的结果-对于该端点,我需要传递任何我单击从早期JSON结果中获取的特定ID。
私有静态字符串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;
}
答案 0 :(得分:0)
在第一个原因中,为什么不使用Volley(由Google推荐)库与其余API进行通信? 如果您决定将其更改为排球,请从此处开始: Volley Library for Android,并通过我之前写过的一小堂课简化它VolleyWebClient,您只需将其添加到项目中即可。
但是为了您自己的代码,我认为响应500错误表明缺少您请求的内容类型。通常要获取令牌,您可以使用如下所示的Form内容类型:
setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
希望它对您有所帮助,并节省您的时间。