2017-01-19 1 views
0

Ist es möglich, eine Anfrage in Volley so in die Warteschlange zu stellen, dass, wenn keine Internetverbindung besteht, diese wartet, bis eine Internetverbindung besteht, und dann die Anfrage stellt?Wie stelle ich Anfragen in Volley ein, wenn keine Internetverbindung besteht?

Betrachtet man die Dokumentation von Volley, bin ich ziemlich sicher, dass ich setRetryPolicy() auf einem Request Objekt aufrufen muss, in einem RetryPolicy Objekt übergeben. Ich bin mir jedoch nicht ganz sicher, wie man die Methode retry() implementiert, um das gewünschte Verhalten auszuführen.

Die Volley Dokumentation nicht ganz uns informieren, wann genau die retry() Methode aufgerufen wird, also bin ich nicht sicher, wie um dies zu realisieren:

http://afzaln.com/volley/com/android/volley/RetryPolicy.html#retry(com.android.volley.VolleyError)

Antwort

1

Hier ist ein Weg, es zu tun, die doesn ‚t ganz die Request.retry() Methode von Volley beinhalten:

zuerst wird jedes Mal, wenn ich einen Volley Anfrage machen, ich zum ersten Mal testen, ob es irgendeine Internet-Verbindung mit dieser Funktion:

public boolean isInternetConnected(Context context) { 
    ConnectivityManager connectivityManager 
     = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 
    return activeNetworkInfo != null && activeNetworkInfo.isConnected(); 
} 

Wenn keine Internetverbindung besteht, speichere ich die Anfrage in einer SharedPreferences-Datei. (Sie können argumentieren, wenn dies eine gute Möglichkeit ist, ausstehende Web-Anforderungen zu speichern, aber ich brauchte nur etwas, um schnell zu starten. Sie können eine Datenbank verwenden, wenn Sie möchten.)

Ich definierte einen BroadcastReceiver in meinem Manifest um auf Änderungen der Internetkonnektivität zu reagieren.

<receiver android:name=".NetworkBroadcastReceiver" > 
    <intent-filter> 
     <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
    </intent-filter> 
</receiver> 

Und dann in der NetworkBroadcastReceiver:

public class NetworkBroadcastReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(final Context context, final Intent intent) { 
     if(Utlis.isInternetConnected(context)) { 
      // Here, I read all the pending requests from the SharedPreferences file, and execute them one by one. 
     }  
    } 
} 
Verwandte Themen