2016-06-10 7 views
0

Hallo ich verwende retrofit + rxandroid in meiner App. Also hier habe ich Methode, um an die Kette AnfragenRetrofit 400 schlechte Anfrage durch gemeinsame Einstellungen verursacht

public void requestToken(String token,String push_token){ 
    api.getApi().signIn(token,push_token) 
      .map(signInModel -> { 
       SharedPreferencesHelper.setLoggedIn(); 
      SharedPreferencesHelper.setCurrentUserToken(signInModel.getData().getToken());//this line cause 400 bad request 
       return api.getApi().getUser(signInModel.getData().getToken()); 
      }) 
      .subscribeOn(Schedulers.newThread()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe(new Observer<User>() { 
       @Override 
       public void onCompleted() { 

       } 

       @Override 
       public void onError(Throwable e) { 
        Log.i(TAG, "onError: " + e); 
       } 

       @Override 
       public void onNext(User user) { 
        UserData data = user.getUserdata(); 

       } 
      }); 

} 

nicht bekommen kann, warum SharedPreferencesHelper.setCurrentUserToken(signInModel.getData().getToken());verursacht 400 Bad Request Retrofit Fehler. Ohne dies funktioniert es perfekt.

Das ist mein api Schnittstelle

public interface Api { 


     @FormUrlEncoded 
     @POST("/auth/digits/signin") 
     public Observable<SignInModel> 
     signIn(@Field("digits_token") String digits_token, @Field("push_token") String push_token); 

     @GET("/user/get") 
     public User 
     getUser(@Header("Authorization") String authorization_header); 
} 

Antwort

0

Das Problem war mit RequestInterceptor. Eigentlich weiß nicht, warum shared Vorlieben es verursacht, aber es war meine schlechten Senden-Header, die

public SapronApi() { 

    RestAdapter restAdapter = new RestAdapter.Builder() 
      .setEndpoint(BASE_URL) 
      .setRequestInterceptor(request -> request.addHeader("Authorization",SharedPreferencesHelper.getToken())) 
      .setLogLevel(RestAdapter.LogLevel.FULL) 
      .build(); 
    mApi = restAdapter.create(Api.class); 

} 


public SapronApi(Boolean dummy){ 

    RestAdapter restAdapter = new RestAdapter.Builder() 
      .setEndpoint(BASE_URL) 
      .setLogLevel(RestAdapter.LogLevel.FULL) 
      .build(); 
    mApi = restAdapter.create(Api.class); 
} 

Erstellen von api Aufruf null war ohne statischen Header mein Problem gelöst.

0

400 klingt wie die spezifischen Fehlercode, den Sie von Ihrem Server zu bekommen. Sie können Debugging versuchen, indem Sie Loglevel bei Retrofit hinzufügen.

Retrofit retrofit = new Retrofit.Builder() 
    .baseUrl(NetworkCalls.BASE_URL) 
    .client(client) 
    .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) 
    .addConverterFactory(GsonConverterFactory.create()) 
    .setLogLevel(RestAdapter.LogLevel.FULL)    // <--- Add this line 
    .build(); 

Mit der Loglevel, können Sie möglicherweise einige Fehler JSON zurück von Ihrem Server sehen.

Beispiel:

{"statusCode":400,"message":"Some parameters are missing"} 

HINWEIS: Diese FULL loglevel wird das Debuggen Zweck und ich denke, Sie es für Produktionsfreigabe deaktivieren sollte.