2016-09-06 1 views
0

Nun, ich habe versucht, überall zu suchen, bevor Sie diese Frage stellen. Ich arbeite an einer Anwendung, die Retrofit implementiert, um alle Serverinteraktionen zu behandeln. Alles funktioniert gut, aber wenn ich die App auf Android M (Gerät: huawei P9/P9 Lite) getestet, werden die Rückrufe von Retrofit nur aufgerufen, wenn das Gerät WIFI verbunden ist. Um genau zu sein: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); 

wie Sie es ist ein straight forward Anruf nichts Besonderes zu sehen. Aus irgendeinem Grund wird der Rückruf nie (ohne Nachrichten oder Ausnahmen auf dem Android-Monitor) aufgerufen, wenn das Telefon mobile Daten verwendet. und he're den Rückruf

@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

Können Sie die ausgelöste Ausnahme angeben? Oder der Fehlercode ... – Jaythaking

+0

Haben Sie die Netzwerkberechtigungen im Manifest festgelegt? ' ' Hat Ihr Gerät auch Daten deaktiviert für zellulare? –

+0

Jeder andere Anruf innerhalb der Anwendung funktioniert einwandfrei. Die Berechtigung wird im Manifest deklariert. Das seltsame Ding nur in diesem Fall wird der Callback nie aufgerufen (ich habe sogar versucht, die Timeout-Zeit zu verringern) nichts. Ich benutze einen Fragment Pager Adapter mit Fragmenten darin innerhalb des Fragments Ich abzufangen ein Klick-Ereignis, um diesen Anruf zu starten der Anruf wird ausgeführt, aber der Rückruf wird nie ausgelöst –

Antwort

1

können Sie zuerst überprüfen, ob das Gerät eine mobile Internetverbindung hat:

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

} 

Und Sie können ein anderes nicht 200-Code Antwort hinzufügen:

@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

Bereits überprüft, die Cellular Daten läuft und läuft (LTE Network) –

+0

Ich habe die Antwort bearbeitet, vielleicht hast du keine 200-Code-Antwort vom Mobilfunknetz. –

+0

ich werde es versuchen und dir sagen –

Verwandte Themen