2017-10-06 299 views
0

我正在使用Retrofit 2向ASP.NET API發送POST請求,我得到的是響應中的HTML而不是JSON。如果我更改目標URL,並調用不同的API,並得到JSON響應Retrofit 2返回HTML而不是JSON

這裏是我的API接口

@POST("PosLogin") 
Call<CinekinRequest> login(); 

休息經理

public static final String BASE_URL = "******************"; 

private API homeApi; 

public API getAPi() { 
if (homeApi == null) { 

HttpLoggingInterceptor logging = new HttpLoggingInterceptor(); 

logging.setLevel(HttpLoggingInterceptor.Level.BODY); 

OkHttpClient.Builder httpClient = new OkHttpClient.Builder(); 

httpClient.addInterceptor(logging);   
Gson gson = new GsonBuilder() 
.setLenient() 
.create(); 


Retrofit retrofit = new Retrofit.Builder() 
.baseUrl(BASE_URL) 
.addConverterFactory(GsonConverterFactory.create(gson)) 
.client(httpClient.build()) 
.build(); 

homeApi = retrofit.create(API.class); 
       } 
return homeApi; 
      } 

執行我的登錄信息()

public void login(final Context context, CinekinRequest login){ 

Log.e("login", "starting"); 

Call call = manager.getAPi().login(); 
call.enqueue(new Callback<CinekinRequest>() { 

@Override 
public void onResponse(Call<CinekinRequest> call, Response<CinekinRequest> response) { 

Toast.makeText(context, "Success " + response.message(), Toast.LENGTH_SHORT).show(); 
Log.e("res", "success"); 
} 

public void onFailure(Call<CinekinRequest> call, Throwable t) { 
     Toast.makeText(context, "error: " + t.getMessage(), Toast.LENGTH_LONG).show(); 
     Log.e("error", t.getMessage()); 
     } 
     }); 
    } 
+0

我建議測試使用類似[郵差(HTTPS的API:// WWW .getpostman.com /)查看返回的響應類型。 API聽起來像它沒有返回json。 – mononz

+0

只需檢查一次回覆。有時候由於錯誤,你會得到html格式的響應。 –

+0

原來,API實際上是一個配置爲返回JSON的SOAP API。我曾使用過Retrofit,被告知它是一個REST API。因此我改變了我的代碼,它正在工作。感謝大家。 –

回答

2

請在下面加改裝聲明onResponse

if (response.isSuccessful()) { 
     // Do something 
    } else { 
     // Do something 
    } 

,或者如果你想只接受響應200

if (response.code() == 200) { 
     // Do something 
    } else { 
     // do something 
    } 
+0

原來,API實際上是一個配置爲返回JSON的SOAP API。我曾使用過Retrofit,被告知它是一個REST API。因此我改變了我的代碼,它正在工作。感謝大家。 –