Ошибка метода Loopj Post - ошибка при попытке отправить сообщение JSON - PullRequest
0 голосов
/ 03 октября 2018

Я работаю в приложении для Android, которое должно отправлять электронную почту пользователя методом post.Конечная точка API находится в https://api -iddog.idwall.co / , когда я уже выполнил некоторые тесты и смог получить значения отсюда.Я использую библиотеку Loopj.

Тем не менее, мне было поручено использовать эту конечную точку:

https://api -iddog.idwall.co / signup

Руководство по документациипоказывает, что мне нужно создать метод POST, используя следующие параметры:

с использованием Content-Type: application/json header

, а URL-адрес публикации должен выглядеть примерно так:

ApiPost Doc

Имея все это в виду, я получил метод create под названием attempPost().В этом методе я создаю объект AsyncHttpRequest, RequestParams и сохраняем действительное электронное письмо, введенное пользователем.

private void attempPost() {

    AsyncHttpClient client = new AsyncHttpClient();
    RequestParams params = new RequestParams();

    String url = "https://api-iddog.idwall.co/signup";
    String userEmail = userEmailView.getText().toString();

    JSONObject jsonEmail = new JSONObject();
    try {
        jsonEmail.put("email", userEmail);

    } catch (JSONException e) {
        e.printStackTrace();
    }
    Log.d("Dog", " " + jsonEmail.toString());


    params.put("-d", jsonEmail);
    client.addHeader("Content-Type", "application/json");
    client.post(url, params, new AsyncHttpResponseHandler() {
        @Override
        public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
            Log.d("Dog", "onSucess" + responseBody.toString());

        }

        @Override
        public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {

            Log.e("Dog", "" + error.toString());

        }
    });



}

Этот метод вызывается в OnclickListener, а журналвозвращая сообщение под названием BadRequest и код состояния 400. Я уже пытался применить некоторые примеры кода из документа Loopj, но я не работал.Может ли кто-нибудь дать мне понимание того, что я делаю неправильно?Из того, что я могу собрать, ответом на успех должна быть строка (токен), и мне нужен этот токен для завершения проекта.

РЕДАКТИРОВАТЬ.

Я немного больше поработал с документацией и другими примерами здесь, в стеке, и обнаружил следующее: РАЗМЕЩЕНИЕ JSON / XML с использованием android-async-http (loopj)

ВВ принятом ответе есть пример того, как опубликовать JSON.

Затем я внес несколько изменений в свой метод tryPost.

private void attempPost() {

    AsyncHttpClient client = new AsyncHttpClient();
    RequestParams params = new RequestParams();


    String url = "https://api-iddog.idwall.co/signup";
    String userEmail = userEmailView.getText().toString();

    JSONObject jsonParams = new JSONObject();
    try {
        jsonParams.put("email", "your@email.com");
    } catch (JSONException e) {
        e.printStackTrace();


    }

    client.post(getApplicationContext(), url, jsonParams, "application/json", new AsyncHttpResponseHandler() {
        @Override
        public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
            Log.d("Dog", "onSucess" + responseBody.toString());

        }

        @Override
        public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
            Log.e("Dog", "" + error.toString());
            Log.e("Dog", "status code " + String.valueOf(statusCode));
        }
    });

}

Но Android Studio подсказывает мне преобразовать jsonParams в сущность.В примере, который я получил из стека, он использует следующий код для достижения этой цели:

StringEntity entity = new StringEntity(jsonParams.toString());

Однако моя Android-студия получает ужас, который говорит:

Необработанное исключение: java.io.UnsupportedEncodingException,

До этого момента я не мог придумать способ решить эту проблему.

1 Ответ

0 голосов
/ 05 октября 2018

Мне удалось заставить его работать, API теперь возвращает правильный ответ и код состояния 200. Я преобразовал JsonObject в ByteArrayEntity, так как StringEntity не был опцией.

private void attempPost() {

    AsyncHttpClient client = new AsyncHttpClient();
    RequestParams params = new RequestParams();

    String userEmail = userEmailView.getText().toString();

    JSONObject jsonParams = new JSONObject();
    try {
        jsonParams.put("email", userEmail);
    } catch (JSONException e) {
        e.printStackTrace();


    }

    ByteArrayEntity be = new ByteArrayEntity(jsonParams.toString().getBytes());


    //TODO create a class to handle JSON post, getmethods and parse token value
    client.post(getApplicationContext(), API_URL, be, "application/json", new JsonHttpResponseHandler() {


        @Override
        public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
            super.onSuccess(statusCode, headers, response);
            Log.d("Dog", "onSucess " + response.toString());
            Log.d("Dog", "status code " + String.valueOf(statusCode));
        }

        @Override
        public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) {
            super.onFailure(statusCode, headers, throwable, errorResponse);
            Log.e("Dog", "" + errorResponse.toString());
            Log.e("Dog", "status code " + String.valueOf(statusCode));
        }


    });

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...