2015-12-07 2 views
1

Это функция, которую я использовал для сетевых вызовов.retrofit 400 Bad Request

private void getSample() { 


    Log.d("", "getSample : "); 
    OkHttpClient client = new OkHttpClient(); 

    HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); 
    interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); 
    client.interceptors().add(interceptor); 

    Retrofit retrofit = new Retrofit.Builder() 
      .baseUrl(NetworkCalls.BASE_URL) 
      .client(client) 

      .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) 
      .addConverterFactory(GsonConverterFactory.create()) 
      .build(); 
    NetworkCalls.CustomerApi customerApi = retrofit.create(NetworkCalls.CustomerApi.class); 

    Log.e("customerApi Created", "customerApi object Created : "); 

    customerApi.getCategories("eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjgsImlzcyI6Imh0dHA6XC9cLzE5Mi4xNjguMS42MDo4ODg4XC9DQ1YzXC9wdWJsaWNcL2FwaVwvbG9naW4iLCJpYXQiOjE0NDk0ODg5NDMsImV4cCI6MTQ0OTQ5MjU0MywibmJmIjoxNDQ5NDg4OTQzLCJqdGkiOiI0ODY4ZmNmZDk4OTIxZGQwYjA2ZDZlN2EyYjRjZGMxMSJ9.7c60LRQMFCtqprCbbULgR5xG-FxwXnRUZPuWeMJXcNE") 
      .subscribeOn(Schedulers.newThread()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe(new Subscriber<Response<DataCategoryList>>() { 
       @Override 
       public void onCompleted() { 

        Log.e("onCompleted", "onCompleted : "); 

       } 

       @Override 
       public void onError(Throwable e) { 
        Log.e("onError", "onError : " + e.getMessage()); 
        e.printStackTrace(); 

        // network errors, e. g. UnknownHostException, will end up here 
       } 

       @Override 
       public void onNext(Response<DataCategoryList> startupResponseResponse) { 



       } 
      }); 
} 

класс интерфейса

public interface CustomerApi { 
    @Headers({ 
      "Accept: application/json" 
    }) 
    @FormUrlEncoded 
    @POST("categories") 
    Observable<Response<DataCategoryList>> getCategories(@Field("token") String token); 

    } 

получение 400 Bad Request.

Журнал ошибок

<-- HTTP/1.1 400 Bad Request (207ms) 
    12-07 17:48:56.408 21024-21067/com.cc.customer D/OkHttp: Date: Mon, 07 Dec 2015 12:19:22 GMT 
    12-07 17:48:56.408 21024-21067/com.cc.customer D/OkHttp: Server: Apache/2.2.29 (Unix) mod_wsgi/3.5 Python/2.7.10 PHP/5.6.10 mod_ssl/2.2.29 OpenSSL/0.9.8zg DAV/2 mod_fastcgi/2.4.6 mod_perl/2.0.9 Perl/v5.22.0 
    12-07 17:48:56.408 21024-21067/com.cc.customer D/OkHttp: X-Powered-By: PHP/5.6.10 
    12-07 17:48:56.408 21024-21067/com.cc.customer D/OkHttp: Cache-Control: no-cache 
    12-07 17:48:56.408 21024-21067/com.cc.customer D/OkHttp: Set-Cookie: XSRF-TOKEN=5Uqd6WSjbalLcvX3o9RLDY1bGt69ktNoiLZZOahP; expires=Mon, 07-Dec-2015 14:19:22 GMT; Max-Age=7200; path=/ 
    12-07 17:48:56.408 21024-21067/com.cc.customer D/OkHttp: Set-Cookie: laravel_session=882b5bdedd5dac0fcbfb88706406e3cc0acf91f6; expires=Mon, 07-Dec-2015 14:19:22 GMT; Max-Age=7200; path=/; httponly 
    12-07 17:48:56.408 21024-21067/com.cc.customer D/OkHttp: Content-Length: 30 
    12-07 17:48:56.408 21024-21067/com.cc.customer D/OkHttp: Connection: close 
    12-07 17:48:56.408 21024-21067/com.cc.customer D/OkHttp: Content-Type: application/json 
    12-07 17:48:56.408 21024-21067/com.cc.customer D/OkHttp: OkHttp-Selected-Protocol: http/1.1 
    12-07 17:48:56.408 21024-21067/com.cc.customer D/OkHttp: OkHttp-Sent-Millis: 1449490736233 
    12-07 17:48:56.408 21024-21067/com.cc.customer D/OkHttp: OkHttp-Received-Millis: 1449490736410 
    12-07 17:48:56.408 21024-21067/com.cc.customer D/OkHttp: <-- END HTTP (30-byte body) 

Любая помощь будет очень ценна.

ответ

10

400 звучит как специальный код ошибки, который вы получаете с вашего сервера. Вы можете попробовать отладки, добавив loglevel на Retrofit.

OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder(); 
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(); 
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY); 
clientBuilder.addInterceptor(loggingInterceptor); 

Retrofit retrofit = new Retrofit.Builder() 
     .baseUrl(NetworkCalls.BASE_URL) 
     .client(clientBuilder.build()) 
     .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) 
     .addConverterFactory(GsonConverterFactory.create()) 
     .build(); 

добавить зависимости в Gradle

compile 'com.squareup.okhttp3:logging-interceptor:3.3.1' 

С LOGLEVEL, возможно, вы можете увидеть некоторые ошибки JSON обратно с сервера.

Пример:

{"statusCode":400,"message":"Some parameters are missing"} 
D/Retrofit: <--- END HTTP (76-byte body) 
+0

хороший один спасибо, – Amare