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 让您的生活更轻松。话虽这么说,我确实认为学习如何自己做这一切很重要也很好,但其他人已经为你造好了轮子,而且效果惊人。