2016-09-06 70 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

我会尽力告诉你 –