5

我是 Android 新手,我创建了一个小应用程序来跟踪我的位置。现在我需要做的是将这些位置以 JSON 格式发送到外部 API,并且我也能够让它工作。

问题是,如果网络连接不可用怎么办?如果我关闭我的设备怎么办?

如果网络连接再次可用,我需要做一些事情来将这些位置保留在队列中并将它们发送到 API。

我考虑过将它们放在 SQLite 中,但我担心性能。也许一些可以处理队列的 IntentService?你有什么建议?我应该如何解决这些问题?

4

1 回答 1

1

Volley 库有一个请求队列,可以帮助您。 http://arnab.ch/blog/2013/08/asynchronous-http-requests-in-android-using-volley/ http://www.itsalif.info/content/android-volley-tutorial-http-get-后置

至于检测网络何时再次可用,我使用了一个 BroadcastReceiver 来监听 NetworkState 意图。

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");
                }
            }
        }

    }

显现

 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

 <receiver android:name="YOUR.PACKAGE.NetworkStateReceiver" >
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" >
                </action>
            </intent-filter>
        </receiver>
于 2014-02-17T07:09:35.393 回答