2017-01-02 4 views
1

Ich versuche, eine Post mit Retrofit zu tun, um zu überprüfen, ob einige Daten im Server vorhanden sind. Mein Problem ist, dass onResponse oder OnFailure durchgehen. Der Code wird in diesen beiden Methoden niemals übergeben. Ich bekomme keinen Fehler im Log. Wenn ich debuggen, hier der Code stop: call.enqueue (neuer Rückruf() und im nächsten Schritt außerhalb des Verfahrens gehtPost-Methode mit Retrofit nie in OnResponse oder OnFailure

wird Einige helfen

-Code zu schätzen wissen werden.

ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class); 

     Call<User> call = apiService.smsPincodeCheck(getPhoneNuber, email); 
     call.enqueue(new Callback<User>() { 
      @Override 
      public void onResponse(Call<User> call, Response<User> response) { 
       if(response.isSuccess()){ 
        Toast.makeText(RegisterThreeActivity.this, "200", Toast.LENGTH_SHORT).show(); 
       } 

       if(response.code() == 401){ 
        Toast.makeText(RegisterThreeActivity.this, "401", Toast.LENGTH_SHORT).show(); 
       } 
      } 

      @Override 
      public void onFailure(Call<User> call, Throwable t) { 

      } 
     }); 

Schnittstelle :

@FormUrlEncoded 
    @POST("api/check") 
    Call<User> smsPincodeCheck(@Field("email") String email, @Field("phoneNumber") String phoneNumber); 

User-Modell:

public class User implements Serializable { 
    private final static String TAG = "User"; 

    @SerializedName("user") 
    @Expose 
    private Long id; 
    private Long commerceId; 
    private String email; 
    private String name; 
    private String lastname; 
    private String dni; 
    private String companyCharge; 
. 
. 
. Getters and setters 

JSON:

Dies ist die json, die ich an den Server zu senden bin versucht:

{ 
    "phoneNumber" : "444444444", 
    "email" : "[email protected]" 
} 

EDIT 1:

Call<ResponseSMS> call = apiService.smsPincodeCheck(getPhoneNuber, email); 
    call.enqueue(new Callback<ResponseSMS>() { 
     @Override 
     public void onResponse(Call<ResponseSMS> call, Response<ResponseSMS> response) { 
      if(response.isSuccess()){ 
       Toast.makeText(RegisterThreeActivity.this, "200", Toast.LENGTH_SHORT).show(); 
      } 

      if(response.code() == 401){ 
       Toast.makeText(RegisterThreeActivity.this, "401", Toast.LENGTH_SHORT).show(); 
      } 
     } 

     @Override 
     public void onFailure(Call<ResponseSMS> call, Throwable t) { 
      Toast.makeText(RegisterThreeActivity.this, "Failure", Toast.LENGTH_SHORT).show(); 
     } 
    }); 
} 

Schnittstelle:

Call<ResponseSMS> smsPincodeCheck(@Field("email") String email, @Field("phoneNumber") String phoneNumber); 

Modell :

public class ResponseSMS { 
    public String response; 
    public int status; 

    public String getResponse() { 
     return response; 
    } 

    public void setResponse(String response) { 
     this.response = response; 
    } 

    public int getStatus() { 
     return status; 
    } 

    public void setStatus(int status) { 
     this.status = status; 
    } 
} 
+0

Sie sagen, dass Sie versuchen, JSON zu senden, aber Ihre Retorift Schnittstelle beschreibt, dass Ihr versuchen Form zu senden – Divers

+0

Nach dem Anruf Web-Service, welche Art von Daten kehren Sie vom Server? Handelt es sich bei diesen Daten um ein 'Benutzer'-Modell? –

+0

Wie kann ich einen Json mit meiner Schnittstelle senden? Der Server gibt nichts zurück. –

Antwort

2

Jetzt müssen Sie eine separate Modellklasse machen Antwort des Web-Service zu handhaben:

public class Response { public String response; public int status; }

und setzen diese Klasse anstelle von User im Retrofit-Web-Service-Aufruf.

ersetzen User mit Response in: 1. Ihre smsPincodeCheck Methode der ApiInterface Schnittstelle. 2. Call<Response> call = apiService.smsPincodeCheck(getPhoneNuber, email); 3.

call.enqueue(new Callback<Response>() { 
      @Override 
      public void onResponse(Call<Response> call, Response<Response> response) { 
       if(response.isSuccess()){ 
        Toast.makeText(RegisterThreeActivity.this, "200", Toast.LENGTH_SHORT).show(); 
       } 

       if(response.code() == 401){ 
        Toast.makeText(RegisterThreeActivity.this, "401", Toast.LENGTH_SHORT).show(); 
       } 
      } 

      @Override 
      public void onFailure(Call<Response> call, Throwable t) { 

      } 
     }); 
+0

Sie meinen call.enqueue (neuer Rückruf () stattdessen call.enqueue (neuer Rückruf () ?? –

+0

yep Versuchen Sie, dies zu ändern. Sie müssen auch 'User' mit' Response' in Ihrer 'smsPincodeCheck' Methode der' ApiInterface' Schnittstelle ändern. –

+0

Dies funktioniert nicht. Mit Ihren Änderungen habe ich einen inkompatiblen Typ: Anruf smsPincodeCheck (@Body User user); Anruf call = apiService.smsPincodeCheck (Benutzer); –

Verwandte Themen