Как сделать базовый POST-запрос к Google REST API листов? - PullRequest
0 голосов
/ 26 октября 2018

Я пытаюсь добавить значение в таблицы Google, используя запрос POST (добавление).

При выполнении запроса GET на основе JsonObjectRequest с использованием ключа API (сгенерированного в облаке Google) я не получаю ошибок, и все работает нормально. Но когда я пытаюсь использовать аналогичный POST-запрос (вставляя значения для хранения в электронную таблицу в requestBody), android studio выдает мне ошибку:

E/Volley: [165] BasicNetwork.performRequest: Unexpected response code 401 for https://sheets.googleapis.com/v4[...rest of my url...]
D/Error.Response: com.android.volley.AuthFailureError

Это потому, что я неправильно сформулировал тело запроса или не смог аутентифицировать мой запрос? Я предполагаю, что моя аутентификация в порядке, потому что запрос GET не получает ошибок. Можете ли вы помочь мне и сказать, что не так в моем запросе?

Я довольно новичок в программировании Android и использую REST API, поэтому, возможно, есть кое-что, чего я не понимаю. Мой код в основном основан на том, что я обнаружил при переполнении стека:

   public void getSheetInfo(View view) throws JSONException {
    RequestQueue queue = Volley.newRequestQueue(this);

    final String url = "https://sheets.googleapis.com/v4/spreadsheets/<HereIsMySpreadsheetID>/values/Sheet1!A1:append?key=<HereIsMyAPIKey>";

    JSONObject jsonBody = new JSONObject();
    Object a1 = "TEST appended Row 1 Column A";
    jsonBody.put("values", a1);
    final String requestBody = jsonBody.toString();

    StringRequest stringRequest = new StringRequest(Request.Method.POST, url,
            new Response.Listener<String>()
            {
                @Override
                public void onResponse(String response) {
                    Log.d("Response", response.toString());
                }
            },
            new Response.ErrorListener()
            {
                @Override
                public void onErrorResponse(VolleyError error){
                    Log.d("Error.Response", error.toString());
                }
            }
    ) {
        @Override
        public String getBodyContentType() {
            return "application/json; charset=utf-8";
        }

        @Override
        public byte[] getBody() throws AuthFailureError {
            try {
                return requestBody == null ? null : requestBody.getBytes("utf-8");
            } catch (UnsupportedEncodingException uee) {
                VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s", requestBody, "utf-8");
                return null;
            }
        }

        @Override
        protected Response<String> parseNetworkResponse(NetworkResponse response) {
            String responseString = "";
            if (response != null) {
                responseString = String.valueOf(response.statusCode);
            }
            return Response.success(responseString, HttpHeaderParser.parseCacheHeaders(response));
        }
    };
    queue.add(stringRequest);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...