Android M + RetroFit 2

时间:2016-09-06 14:14:58

标签: android retrofit android-6.0-marshmallow

在发布此问题之前,我已尝试到处寻找。 我正在开发一个实现Retrofit的应用程序来处理所有服务器交互。 everthing工作正常,但当我在Android M上测试应用程序时(设备:huawei 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);

正如你所看到的那样,这是一个直截了当的呼唤。但由于某种原因,当手机使用移动数据时,永远不会调用回叫(在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();

}

1 个答案:

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