AsyncHttpRequest POST не запускает обратные вызовы (android-async-http by loopj)

Я пытаюсь отправить POST на сервер с помощью async http-библиотеки loopj. Следующий код довольно стандартный, но я не могу заставить его работать.

Я отлаживал довольно много и проверил следующее:

  • URL-адрес правильный.
  • Параметры правильны, и они корректно сохраняются в переменной params.

Похоже, что когда HttpResponse response = client.execute(request, context); AsyncHttpRequest.makeRequest() в AsyncHttpRequest.makeRequest() запрос не содержит никаких параметров:

EDIT: посмотрев на код немного больше, кажется, что параметры POST могут быть включены в объект или головную группу.

Введите описание изображения здесь

Но реальная проблема заключается в том, что я не получаю никаких обратных вызовов (см. Код ниже). Оператор if после client.execute() никогда не вызывается (точка останова не запускается).

 RequestParams params = new RequestParams(); params.put("loginid", "user"); params.put("password", "pass"); params.put("deviceid", "deviceid"); AsyncHttpClient client = new AsyncHttpClient(); client.post(MDSettings.BASE_URL + "/user/login", params, new AsyncHttpResponseHandler() { @Override public void onSuccess(String response) { Log.d(MDSettings.TAG, "MDConnectionManager - login - response: " + response); singleton.connectionSuccessful(response, returnIndex); } @Override public void onFailure(Throwable error, String content) { Log.d(MDSettings.TAG, "MDConnectionManager - login - content: " + content); singleton.connectionFailed("Login Failed", error.getMessage(), returnIndex); } }); 

Я использую этот lib, потому что он позволяет мне отправлять файлы, которые мне понадобятся позже в этом проекте. Если есть другая библиотека, которая делает то же самое (и на самом деле работает), это будет хорошо со мной.

Мой вопрос: почему бы мне не получить обратные вызовы и как я могу это исправить? Скажи мне, когда что-то неясно, и я попытаюсь объяснить более подробно.

Кажется, моя запись android.permission.INTERNET была удалена из файла манифеста. После его добавления все работало так, как ожидалось. Каждый раз, когда что-то не работает, я проверю свои разрешения.

Попробуйте этот простой фрагмент.

Это работает на моем устройстве.

Он печатает «Сбой», поскольку POST не разрешен (статус HTTP: 405)

 AsyncHttpClient client = new AsyncHttpClient(); RequestParams params = new RequestParams(); params.put("q", "google"); client.post("http://google.com", params, new AsyncHttpResponseHandler(){ public void onSuccess(String arg0) { Log.d("TAG", "Success"); }; public void onFailure(Throwable arg0, String arg1) { Log.d("TAG", "Failure"); }; }); 

Ну, я ничего не знаю об этой библиотеке, но почему бы не попытаться сделать что-то похожее на нее, используя AsyncTasks? Например, вы можете подклассировать AsyncTask и указать URL-адрес для загрузки. Другой способ заключается в подклассе AsyncTask и предоставлении ему объекта Callable. Этот подход позволит вам обобщить этот класс, что делает его подходящим для выполнения различных долгосрочных задач, а не только сетевых запросов. Оба метода могут использовать некоторый интерфейс с обратными вызовами (onSuccess, onFailure). И в onPostExecuteMethod вы можете определить, была ли ошибка во время выполнения задачи или нет, и обеспечить обратный вызов neede.

Здесь, в вашем коде, вы напрямую вызываете responsehanlder из метода post. первый:

  client.post(MDSettings.BASE_URL + "/user/login", params, responseHandler); 

В следующей строке просто добавьте метод get

  client.get(MDSettings.BASE_URL + "/user/login", new AsyncHttpResponseHandler() { @Override public void onSuccess(String response) { System.out.println(response); } }); 

То u получит ответ от него

Intereting Posts