2017-05-05 68 views
2

我正在使用Retrofit來調用我的API。我對改造很新,這就是我無法找到這個錯誤的原因。我向API發送請求,API響應爲200 OK,但改造後調用onFailure方法。我的API接口如下:翻新總是要求onFailure甚至迴應是200

public interface API { 

    @FormUrlEncoded 
    @POST("login") 
    Call<Login> login(@Query("user") String email,@Query("pass") String password, @Field("device key") String deviceKey); 

} 

,我的電話是:

loginCall = MyApplication.getInstance().getAPI().login(username,password,deviceKey); 
     loginCall.enqueue(new Callback<Login>() { 
      @Override 
      public void onResponse(Call<Login> call, Response<Login> response) { 

       if(response.body() != null) 
       { 
        Login login = response.body(); 
        Toast.makeText(LoginActivity.this, response.body().toString(), Toast.LENGTH_LONG).show(); 
        } 
       } 

      @Override 
      public void onFailure(Call<Login> call, Throwable t) { 
       Toast.makeText(LoginActivity.this, "Failsssssssss", Toast.LENGTH_LONG).show(); 
      } 
     }); 

我的模型類如下:

public class Login { 
    String status; 
    String Auth_Token; 

    public Login(String status, String auth_Token) { 
     this.status = status; 
     Auth_Token = auth_Token; 
    } 
} 

據我理解這個問題,有我的模型類有問題。我的API返回兩個對策:

"{"status":"200","Auth_Token":"jhjsfbah71yb121t312hv"}" 
"{"status":"500","Response":"Invalid Cardentials"}" 

任何幫助,將不勝感激。提前致謝。

+3

改造讀取HTTP狀態,而不是JSON –

+0

哪些變化中的地位比我應該做的,先生,我應該改變,因爲HTTP狀態服務器端的狀態? –

+1

您是否正在記錄呼叫?這可能有助於找出錯誤 –

回答

4

服務器響應存在問題。 Retrofit讀取HTTP狀態,所以你必須確保你從服務器發送它。改造是試圖讀取一個不可用的響應代碼200,因此它正在調用失敗方法。

0

我有一個類似的問題。 在我的情況下,問題是由於將響應轉換爲JSON格式造成的。 (我得到的回覆不是JSON格式) 所以要弄清楚細節,我以ResponseBody的方式如下。

Call<ResponseBody> call = client.callTTS(request); 
call.enqueue(new Callback<ResponseBody>() { 
    @Override 
    public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) { 
     if(response == null) 
     { 
      Log.d("MainActivity", "Response is null"); 
     }else 
     { 
      Log.d("MainActivity", "Response has contents"); 
     } 
    } 

    @Override 
    public void onFailure(Call<ResponseBody> call, Throwable t) { 
     Log.d("MainActivity", t.getMessage()); 
    } 
}); 

希望這可以幫助有同樣問題的人。