5 Stimmen

Android speichert HTTP-Anforderungen in der Warteschlange, während das Netzwerk nicht verfügbar ist, und verarbeitet sie, wenn es wieder eingeschaltet ist.

Ich bin neu in Android und habe eine kleine App erstellt, die meinen Standort verfolgt. Jetzt muss ich diese Standorte im JSON-Format an eine externe API senden, und ich konnte das auch zum Laufen bringen.

Das Problem ist: Was passiert, wenn die Netzwerkverbindung nicht verfügbar ist? Und was passiert, wenn ich mein Gerät ausschalte?

Ich muss etwas tun, das diese Standorte in einer Warteschlange hält und sie an die API weiterleitet, wenn die Netzwerkverbindung wieder verfügbar ist.

Ich dachte daran, sie vielleicht in SQLite zu speichern, aber ich mache mir Sorgen um die Leistung. Vielleicht ein IntentService, der die Warteschlange verarbeitet? Was würden Sie vorschlagen? Wie sollte ich diese Probleme lösen?

1voto

user2818782 Punkte 706

Die Volley-Bibliothek bietet eine Request-Warteschlange, die Ihnen vielleicht helfen kann. http://arnab.ch/blog/2013/08/asynchronous-http-requests-in-android-using-volley/ http://www.itsalif.info/content/android-volley-tutorial-http-get-post-put

Was die Erkennung betrifft, wenn das Netzwerk wieder verfügbar ist, habe ich einen BroadcastReceiver verwendet, der auf NetworkState-Intents hört.

NetworkStateReceiver.java

           public class NetworkStateReceiver extends BroadcastReceiver
        {
            private final static String TAG = "NetworkStateReceiver";

            public void onReceive(Context context, Intent intent)
            {
            Log.d(TAG, "Network connectivity change");
            if (intent.getExtras() != null)
            {
                ConnectivityManager connectivityManager = ((ConnectivityManager) context
                        .getSystemService(Context.CONNECTIVITY_SERVICE));

                NetworkInfo ni = (NetworkInfo) connectivityManager.getActiveNetworkInfo();
                if (ni != null && ni.getState() == NetworkInfo.State.CONNECTED)
                {
                                    //Network becomes available
                    Log.i(TAG, "Network " + ni.getTypeName() + " connected");
                }
                else if (intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY,
                        Boolean.FALSE))
                {
                    Log.d(TAG, "There's no network connectivity");
                }
            }
        }

    }

Manifest

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X