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();
}
}
好吧,在发布这个问题之前,我已经尝试到处寻找。 我正在开发一个实现 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();
}
}