2016-09-06 5 views
0

글쎄,이 질문을 게시하기 전에 어디에서든지 시도해 보았습니다. 모든 서버 상호 작용을 처리하기 위해 Retrofit을 구현하는 응용 프로그램을 작성 중입니다. everthing 괜찮아요하지만 내가 안드로이드 M (장치 : huawei P9/P9 Lite)에서 응용 프로그램을 테스트했을 때 장치가 연결되어있을 때만 retrofit 콜백이 호출되고 있습니다. 은 구체적으로 :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); 

당신이 공상 정직 통화 아무것도 볼 수있다. 어떤 이유로 전화가 모바일 데이터를 사용할 때 콜백이 절대 호출되지 않습니다 (안드로이드 모니터에서 메시지 나 예외없이). 콜백

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

} 
을 he're 장치가 모바일 인터넷 연결이있는 경우 먼저 확인할 수 있습니다
+0

제기 된 예외를 제공 할 수 있습니까? 또는 오류 코드 ... – Jaythaking

+0

매니페스트에서 네트워크 사용 권한을 설정 했습니까? <사용 권한 android : name = "android.permission.ACCESS_NETWORK_STATE"/> 또한 휴대 전화 용 데이터가 비활성화되어 있습니까? –

+0

응용 프로그램 내의 다른 모든 호출이 정상적으로 작동합니다. 권한이 매니페스트에 선언되어 있습니다. 이 경우에만 wierd 건 콜백은 호출되지 않습니다. (심지어 타임 아웃 시간을 줄이려고했습니다.) 아무것도하지 않았습니다. 조각 내에서 프래그먼트 조각이있는 조각 호출기 어댑터를 사용하고 있습니다.이 호출을 시작하기 위해 클릭 이벤트를 가로 챕니다. 호출이 실행되지만 콜백이 실행되지 않습니다. –

답변

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

나는 당신에게 말하려고 노력할 것이다. –

관련 문제