Это попытка использовать Loopj для синхронного вызова пут и пост из класса утилит HTTP. В коде используется синхронный клиент, поскольку он используется внутри AsyncTask, и некоторые взаимодействия с пользовательским интерфейсом сильно зависят от ответа json, поэтому AsyncTask управляет выполнением вызова асинхронно.
Все вызовы get из класса утилит HTTP работают успешно. Пост и пут нет, и они оба, похоже, имеют ту же проблему.
Строка json создается с помощью Gson. Я протестировал вывод json из приложения непосредственно в Postman, и он отправляет API точно так, как ожидалось, поэтому он выглядит хорошо сформированным и ведет себя полностью, как и ожидалось, без каких-либо ошибок.
Вызовы put и post создаются без ошибок. Добавляется базовая авторизация (как показано на экземпляре клиента). Метод put SyncHTTPClient вызывается с использованием нулевого параметра контекста. Я провел небольшое исследование и нашел один пост, где это делалось успешно.
https://github.com/loopj/android-async-http/issues/1139
Вызов put вызывается, но не вводит переопределенные методы обработчика. Он просто возвращает ноль. Я включил часть рабочего класса для просмотра:
public void executePutSave(String name, String pass, String jsonBody) {
client.setBasicAuth(name, pass);
executeLoopJPutCall("/api/Save", jsonBody);
}
public void executeLoopJPutCall(String relativeUrl, String jsonBody) {
String url = getAbsoluteUrl(relativeUrl);
StringEntity entity = new StringEntity(jsonBody, "UTF-8");
jsonResponse = null;
client.put(null, url, entity, "application/json", new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
super.onSuccess(statusCode, headers, response);
jsonResponse = response.toString();
Log.i(TAG, "onSuccess: " + jsonResponse);
}
@Override
public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) {
super.onFailure(statusCode, headers, throwable, errorResponse);
jsonResponse = errorResponse.toString();
Log.e(TAG, "onFailure: " + statusCode + errorResponse );
}
}
);
}