2016-09-06 94 views
0

嗯,我試過在發佈這個問題之前到處尋找。 我正在研究實施Retrofit以處理所有服務器交互的應用程序。 everthing工作正常,但當我在android M(設備:huawei P9/P9 Lite)上測試應用程序時 只有當設備連接WIFI時纔會調用翻新的回調。 具體來說:Android M + RetroFit 2

Retrofit retrofit = new Retrofit.Builder() 
           .baseUrl(Constants.SECONDARY_BASE_URL) 
           .addConverterFactory(GsonConverterFactory.create()) 
           .build(); 
         RestaurantApi restaurantApi = retrofit.create(RestaurantApi.class); 
         Call<ServerResponse> call = restaurantApi.deleteFromFavoris(preferences.getInt("id", 0), getArguments().getInt("idResto")); 
         //asynchronous bestOfCall 
         call.enqueue(BestOfFragment.this); 

,你可以看到這是一個簡單的通話沒有什麼花哨。但由於某種原因,當手機使用移動數據時,從不會調用回調(在Android監視器上沒有消息或例外)。和he're回調

@Override 
public void onResponse(Call<ServerResponse> call, Response<ServerResponse> response) { 
    if (response.code() == 200) { 
     Toast.makeText(getActivity().getApplicationContext(), "Supprimé des favoris", Toast.LENGTH_SHORT).show(); 
     getArguments().putBoolean("isFavoris", false); 
    } 
} 

@Override 
public void onFailure(Call<ServerResponse> call, Throwable t) { 
    Toast.makeText(getActivity().getApplicationContext(), "Désolé une erreur inattendue est survenue !!", Toast.LENGTH_SHORT).show(); 

} 
+0

你能否提供引發的異常?或錯誤代碼... – Jaythaking

+0

您是否在清單中設置了網絡權限?此外,您的設備是否禁用了移動設備的數據?請注意,您的設備是否禁用了數據保護功能? –

+0

應用程序內的其他每個調用都可以正常工作。 權限在清單中聲明。 唯一在這種情況下,回調從來沒有被稱爲(我甚至試圖降低超時時間)的東西沒有什麼奇怪的事情。我正在使用一個片段尋呼機適配器與片段中的片段我截獲一個點擊事件開始這個呼叫 該調用被執行,但回調從未觸發 –

回答

1

你可以先驗證設備是否有移動互聯網連接:

public void hasNetworkConnection() { 
    ConnectivityManager cm = (ConnectivityManager) getActivity().getApplicationContext() 
      .getSystemService(Context.CONNECTIVITY_SERVICE); 

    NetworkInfo networkInfo = cm.getActiveNetworkInfo(); 
    if (networkInfo == null) { 
     Toast.makeText(getActivity().getApplicationContext(), "No internet !!", Toast.LENGTH_SHORT).show(); 
     return; 
    } 

    if (networkInfo.getTypeName().equalsIgnoreCase("WIFI")) 
     if (networkInfo.isConnected()) 
      Toast.makeText(getActivity().getApplicationContext(), "Mobile internet !!", Toast.LENGTH_SHORT).show(); 
    if (networkInfo.getTypeName().equalsIgnoreCase("MOBILE")) 
     if (networkInfo.isConnected()) 
      Toast.makeText(getActivity().getApplicationContext(), "Wifi internet !!", Toast.LENGTH_SHORT).show(); 

} 

而且你可以添加其他非200碼響應:

@Override 
public void onResponse(Call<ServerResponse> call, Response<ServerResponse> response) { 
if (response.code() == 200) { 
    Toast.makeText(getActivity().getApplicationContext(), "Supprimé des favoris", Toast.LENGTH_SHORT).show(); 
    getArguments().putBoolean("isFavoris", false); 
}else{ 
    Toast.makeText(getActivity().getApplicationContext(), "no 200", Toast.LENGTH_SHORT).show(); 
} 
} 
+0

已經檢查蜂窩數據已啓動並運行(LTE網絡) –

+0

我編輯了答案,也許你沒有來自移動網絡的200碼響應。 –

+0

我會盡力告訴你 –