Android M + 改装 2

Android M + RetroFit 2

好吧,在发布这个问题之前,我已经尝试到处寻找。 我正在开发一个实现 Retrofit 来处理所有服务器交互的应用程序。一切正常,但当我在 android M(设备:华为 P9/P9 Lite)上测试应用程序时 只有在设备连接 WIFI 时才会调用改造的回调。 具体来说:

   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);

如您所见,这是一个直截了当的调用,没什么特别的。但由于某种原因,当 phone 使用移动数据时,永远不会调用回调(android 监视器上没有消息或异常)。他是回调

 @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();

}

您可以先验证设备是否有移动互联网连接:

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 代码响应添加一个 else:

@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();
}
}