Android 获取请求
Android GET Request
所以我试图取回一个 JSON 响应,该响应具有一个访问令牌,可用于我未来对该 API 的请求。但是,当我发送请求时,它给了我一个 200 响应,但它失败了。
这是我认为失败的部分代码。我不确定 String token = bundle.getString(AccountManager.KEY_AUTHTOKEN);
会持续多久,但我有一些应用程序不再请求身份验证。
public class RetrieveFeedTask extends AsyncTask<String, Void, String> {
private Exception exception;
protected void onPreExecute() {
progressBar.setVisibility(View.VISIBLE);
responseView.setText("");
}
protected String doInBackground(String... urls) {
// Do some validation here
try {
URL url = new URL(API_URL + authPreferences.getToken());
Log.i("URL", url.toString());
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
int responseCode = urlConnection.getResponseCode();
System.out.println("GET Response code:" + responseCode);
//urlConnection.addRequestProperty("client_id", ClientId);
// urlConnection.addRequestProperty("client_secret", ClientSecret);
// urlConnection.setRequestProperty("Authorization", "JWT " + authPreferences);
try {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
StringBuilder stringBuilder = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {
stringBuilder.append(line).append("\n");
}
bufferedReader.close();
return stringBuilder.toString();
} finally {
urlConnection.disconnect();
}
} catch (Exception e) {
Log.e("ERROR", e.getMessage(), e);
return null;
}
}
protected void onPostExecute(String response) {
if (response == null) {
response = "THERE WAS AN ERROR";
}
progressBar.setVisibility(View.GONE);
Log.i("INFO", response);
responseView.setText(response);
//
// TODO: check this.exception
// TODO: do something with the feed
// try {
// JSONObject object = (JSONObject) new JSONTokener(response).nextValue();
// String requestID = object.getString("requestId");
// int likelihood = object.getInt("likelihood");
// JSONArray photos = object.getJSONArray("photos");
// .
// .
// .
// .
// } catch (JSONException e) {
// e.printStackTrace();
// }
}
}
就个人而言,我不会为 HTTP 连接编写您自己的代码。
使用 OKHttp。
http://square.github.io/okhttp/
这里有一些不错的食谱:
https://github.com/square/okhttp/wiki/Recipes
更多教程:
https://guides.codepath.com/android/Using-OkHttp
OKHttp 将按照您设置的方式为您处理身份验证,并在无法为您进行身份验证时自动续订。
OKHttp 让您的生活更轻松。话虽这么说,我确实认为学习如何自己做这一切很重要也很好,但其他人已经为你造好了轮子,而且效果惊人。
所以我试图取回一个 JSON 响应,该响应具有一个访问令牌,可用于我未来对该 API 的请求。但是,当我发送请求时,它给了我一个 200 响应,但它失败了。
这是我认为失败的部分代码。我不确定 String token = bundle.getString(AccountManager.KEY_AUTHTOKEN);
会持续多久,但我有一些应用程序不再请求身份验证。
public class RetrieveFeedTask extends AsyncTask<String, Void, String> {
private Exception exception;
protected void onPreExecute() {
progressBar.setVisibility(View.VISIBLE);
responseView.setText("");
}
protected String doInBackground(String... urls) {
// Do some validation here
try {
URL url = new URL(API_URL + authPreferences.getToken());
Log.i("URL", url.toString());
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
int responseCode = urlConnection.getResponseCode();
System.out.println("GET Response code:" + responseCode);
//urlConnection.addRequestProperty("client_id", ClientId);
// urlConnection.addRequestProperty("client_secret", ClientSecret);
// urlConnection.setRequestProperty("Authorization", "JWT " + authPreferences);
try {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
StringBuilder stringBuilder = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {
stringBuilder.append(line).append("\n");
}
bufferedReader.close();
return stringBuilder.toString();
} finally {
urlConnection.disconnect();
}
} catch (Exception e) {
Log.e("ERROR", e.getMessage(), e);
return null;
}
}
protected void onPostExecute(String response) {
if (response == null) {
response = "THERE WAS AN ERROR";
}
progressBar.setVisibility(View.GONE);
Log.i("INFO", response);
responseView.setText(response);
//
// TODO: check this.exception
// TODO: do something with the feed
// try {
// JSONObject object = (JSONObject) new JSONTokener(response).nextValue();
// String requestID = object.getString("requestId");
// int likelihood = object.getInt("likelihood");
// JSONArray photos = object.getJSONArray("photos");
// .
// .
// .
// .
// } catch (JSONException e) {
// e.printStackTrace();
// }
}
}
就个人而言,我不会为 HTTP 连接编写您自己的代码。
使用 OKHttp。
http://square.github.io/okhttp/
这里有一些不错的食谱:
https://github.com/square/okhttp/wiki/Recipes
更多教程:
https://guides.codepath.com/android/Using-OkHttp
OKHttp 将按照您设置的方式为您处理身份验证,并在无法为您进行身份验证时自动续订。
OKHttp 让您的生活更轻松。话虽这么说,我确实认为学习如何自己做这一切很重要也很好,但其他人已经为你造好了轮子,而且效果惊人。