Я пытаюсь добавить значение в таблицы 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);
}