2017-09-17 4 views
1

I Frühjahr Boot-Anwendung verwenden mit Federdaten auf Heroku eingesetzt Ruhe. Ich habe eine/api/userDatas Endpunkt, an dem ein Unternehmen kann durch eine POST-Anfrage erstellt werden. Ich habe es mit Postman getestet und es wird erstellt.Retrofit kehrt Inhaltslänge 0 mit Federdaten ruhen

Jetzt bin ich mit Retrofit auf Android die gleiche Funktionalität auszuführen. Aber das Problem ist, dass die Entity auf dem Server erstellt wird, aber onFailure() immer aufgerufen wird. Ich habe gedebuggt und festgestellt, dass Content-Length immer 0.

AngelegtVon

private void createUser() { 
     Gson gson = new GsonBuilder() 
       .setLenient() 
       .create(); 

     HttpLoggingInterceptor logging = new HttpLoggingInterceptor(); 
     logging.setLevel(HttpLoggingInterceptor.Level.BODY); 
     OkHttpClient client = new OkHttpClient.Builder().addInterceptor(logging).build(); 

     Retrofit retrofit = new Retrofit.Builder() 
       .baseUrl(ServeNetworking.ServeURLS.getBaseURL()) 
       .addConverterFactory(GsonConverterFactory.create()) 
       .client(client) 
       .build(); 


     ServeNetworking serveNetworking = retrofit.create(ServeNetworking.class); 
     Call<UserData> getUserByIdResponseCall = serveNetworking.socialConnectAPI(userData); 
     getUserByIdResponseCall.enqueue(new Callback<UserData>() { 
      @Override 
      public void onResponse(Call<UserData> call, Response<UserData> response) { 
       Log.d("getUserById", "onResponse"); 
       Toast.makeText(OTPVerificationActivity.this, "userId : onResponse", Toast.LENGTH_LONG).show(); 
       /** 
       * Save data in local db and navigate to map screen. 
       */ 

       ActivityAnimationUtils.presentActivity(OTPVerificationActivity.this, MapActivity.class); 

       try{ 
        DBManager.getDBManager(OTPVerificationActivity.this).setIsVerified(true); 
       } catch (Exception e){ 
        e.printStackTrace(); 
       } 

      } 

      @Override 
      public void onFailure(Call<UserData> call, Throwable t) { 
       Log.d("getUserById", "onFailure"); 
       Utils.showSnackBar(OTPVerificationActivity.this,"Somethign went wrong", root); 
      } 
     }); 
    } 

und Schnittstelle ist:

public interface ServeNetworking { 

    @POST("/api/userDatas") 
    @Headers({ "Content-Type: application/json;charset=UTF-8"}) 
    Call<UserData> socialConnectAPI(
      @Body UserData user 
    ); 

    @GET("/api/userDatas/{userId}") 
    @Headers({ "Content-Type: application/json; charset=utf-8"}) 
    Call<UserData> getUser(
      @Path("userId") String userId 
    ); 


    /** 
    * this class is used to get the donor base urls... 
    */ 
    class ServeURLS{ 
     private static String baseURL="https://fabrimizer-serve.herokuapp.com"; 

     public static String getBaseURL() { 
      return baseURL; 
     } 

    } 
} 

Ich erhalte folgende Fehlermeldung:

java.io.EOFException: End of input at line 1 column 1 path $ 

Antwort

1

Fand die Lösung.

hinzugefügt Header in ServeNetworking akzeptieren:

@POST("/api/userDatas") 
    @Headers({ "Content-Type: application/json,"Accept: application/json"}) 
    Call<UserData> socialConnectAPI(
      @Body UserData user 
    );