Библиотека android loopj Внутренняя ошибка сервера

Я использую асинхронный Http-клиент loopj для Android, и у меня проблемы с регистрацией. Регистрационный код:

    private void register(){

    RequestParams params = new RequestParams();
    params.put("email", "[email protected]");
    params.put("name", "Lurk");
    params.put("surname", "More");
    params.put("password", "123456789");
    params.put("person", "0");

    Client.post("register", params, new JsonHttpResponseHandler() {
        @Override
        public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
            super.onSuccess(statusCode, headers, response);
            //Log.d("Json_reg", response.toString());

            try {
                JSONObject idJson = response.getJSONObject("_id");
                Log.d("Json_reg", response.toString());
                String strId = idJson.getString("$iod");
                Log.d("my_id", strId);
            } catch (JSONException e) {
                e.printStackTrace();
            }


        }

        @Override
        public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) {
            super.onFailure(statusCode, headers, throwable, errorResponse);
            Log.d("THROW", throwable.toString());
        }
    });

}

Логи показывают мне:

org.apache.http.client.HttpResponseException: Внутренняя ошибка сервера 07-28 11:14:48.676 20728-20728/com.example.murager.httpapp W/JsonHttpRH﹕ onFailure(int, Header[], Throwable, JSONObject) не было переопределено, но обратный вызов был получен org.apache.http.client.HttpResponseException: Internal Server Error

Но когда я вхожу в систему, все в порядке: Код входа:

    private void login(){

    RequestParams params = new RequestParams();
    params.put("email", "[email protected]");
    params.put("password", "123456789");
    params.put("person", "0");

    Client.post("login", params, new JsonHttpResponseHandler() {
        @Override
        public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
            super.onSuccess(statusCode, headers, response);
            try {

                Log.d("Json_con", response.toString());

                String nameStr = response.getString("name");
                String snameStr = response.getString("surname");

                JSONObject id = response.getJSONObject("_id");
                String strId = id.getString("$oid");

                String str = nameStr + "    " + snameStr + "    " + strId;
                tv.setText(str);

            } catch (JSONException e) {
                e.printStackTrace();
            }

        }
    });
}

Мой клиент здесь:

public class Client {

private static AsyncHttpClient client = new AsyncHttpClient();

private static String BASE_URL = "some_url";

public Client() {

}

public static void post(String url, RequestParams params, AsyncHttpResponseHandler handler){
        client.post(getAbsoluteUrl(url), params, handler);
}

private static String getAbsoluteUrl(String relativeUrl) {
    return BASE_URL + relativeUrl;
}

}

Мой вопрос: почему две похожие функции показывают разные результаты?

Регистрация с устаревшей библиотекой работает нормально. Код здесь:

    private void makeRegistration(){

        String nameString = nameEditText.getText().toString();
        String surnameString = nameEditText.getText().toString();
        String emailString = emailEditText.getText().toString();
        String passwordString = passwordEditText.getText().toString();


        ArrayList<NameValuePair> param = new ArrayList<>();

        param.add(new BasicNameValuePair("name", nameString));
        param.add(new BasicNameValuePair("surname", surnameString));
        param.add(new BasicNameValuePair("email", emailString));
        param.add(new BasicNameValuePair("password", passwordString));
        param.add(new BasicNameValuePair("person", userTypeInt + ""));

        Log.d("User_type", userTypeInt + "");

        JSONParser jsonParser = new JSONParser();

        JSONObject jsonObject = jsonParser.makeHttpRequest("http://server/api/v1/r", "POST", param);

    Log.d("What_I_get_2", jsonObject.toString() + "\n");

    try {
        String name = jsonObject.getString("name");
        String surname = jsonObject.getString("surname");
        String id = jsonObject.getString("_id");

        Log.d("What_I_get", jsonObject.toString() + "\n" + id);

    } catch (JSONException e) {
        e.printStackTrace();
    }
}

person zxc123qwe098qqq    schedule 28.07.2015    source источник


Ответы (2)


org.apache.http.client.HttpResponseException: Internal Server Error означает, что ваш сервер http://server_url/api/v1/ выдает эту ошибку. В вашем коде нет ничего плохого.

Если у вас есть доступ к журналам сервера, вы должны проверить его для получения более подробной информации. В противном случае обратитесь к соответствующему специалисту по серверу по поводу проблемы. Возможно, вам не хватает какого-то параметра в запросе register. В любом случае сервер должен отправить какой-то значимый код ответа http. 500 Внутренняя ошибка сервера неверна.

person Akhil    schedule 28.07.2015
comment
Но когда я использую устаревший Apatch DefaultHttpClient, все работает нормально. Возможно, проблема в этой библиотеке loopj. Вы использовали эту библиотеку в своем проекте? - person zxc123qwe098qqq; 28.07.2015

У меня такое же предупреждение об ошибке. Вот хитрость:

Попробуйте удалить строку ниже из вашего метода overide

super.onFailure(statusCode, headers, throwable, errorResponse);

Это просто работает для меня.

person azwar_akbar    schedule 24.02.2016