2017-07-07 62 views
0

我看到了3個其他SO帖子,但解決方案沒有奏效。每個端點返回爲status code 404,並且在改造2中響應爲空。這是我的改造實現:Retrofit2 - 請求總是狀態404和響應null

RetrofitService:

//code setup for HTTP client for Retrofit goes here 
...... 
...... 
public static void initRetrofit() { 
     builder = 
       new Retrofit.Builder() 
         .baseUrl(BuildConfig.BASE_URL) 
      .addConverterFactory(GsonConverterFactory.create(initGson())); 
} 

BuildConfig

buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
      buildConfigField "String", "BASE_URL", "\"http://MY_SERVICE.azurewebsites.net\"" 
     } 
     debug { 
      versionNameSuffix ".staging" 
      buildConfigField "String", "BASE_URL", "\"http://MY_SERVICE.azurewebsites.net\"" 
     } 
} 

終點:

public interface APIServices { 

    @POST("api/users/register.json") 
    Call<HttpResponse<Auth>> register(@Body RegisterData data); 

} 

我在這裏做錯了什麼?其他SO線程建議從/api/users/register.json中刪除//api,我做了這些,但響應沒有變化。

回答

0

您沒有爲Retrofit對象設置HTTP客戶端。嘗試使用OkHttpClient

public static void initRetrofit() { 
    OkHttpClient client = new OkHttpClient.Builder() 
       .connectTimeout(Config.HTTP_CONNECT_TIMEOUT, TimeUnit.MILLISECONDS) 
       .readTimeout(Config.HTTP_READ_TIMEOUT, TimeUnit.MILLISECONDS) 
       .writeTimeout(Config.HTTP_READ_TIMEOUT, TimeUnit.MILLISECONDS) 
       .build(); 

     builder = 
       new Retrofit.Builder() 
         .baseUrl(BuildConfig.BASE_URL) 
         .client(client) 
      .addConverterFactory(GsonConverterFactory.create(initGson())); 
} 

另外,請檢查您的API地址 - 嘗試使用一些服務(例如郵差)本:輸入您的地址(從你的代碼,它是:「http://MY_SERVICE.azurewebsites.netapi/users/register.json」)。

+0

這些已被設置,我沒有包括在答案。這是假設,對不起,我沒有提到:D – Dinuka

0

Retrofit2 base url應以尾部斜線結尾。嘗試添加它:

buildConfigField "String", "BASE_URL", "\"http://MY_SERVICE.azurewebsites.net/\"" 
+1

因此,添加一個'/'到基礎URL並從'/ api/users'端點刪除'/'? – Dinuka

+0

是的,這是公約 – SpaceBison