2015-07-28 2 views
0

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

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 (интермедиат, заголовок [], Throwable, JSONObject) не был переопределен, но обратный вызов был получен org.apache.http.client.HttpResponseException: Внутренняя ошибка сервера

но когда Вход verything в порядке: Логин Код:

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(); 
    } 
} 

ответ

0

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

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

+0

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

+0

отправьте этот код тоже .. в этом случае – Akhil

0

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

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

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

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

Смежные вопросы