我是 Android 新手,我创建了一个小应用程序来跟踪我的位置。现在我需要做的是将这些位置以 JSON 格式发送到外部 API,并且我也能够让它工作。
问题是,如果网络连接不可用怎么办?如果我关闭我的设备怎么办?
如果网络连接再次可用,我需要做一些事情来将这些位置保留在队列中并将它们发送到 API。
我考虑过将它们放在 SQLite 中,但我担心性能。也许一些可以处理队列的 IntentService?你有什么建议?我应该如何解决这些问题?
我是 Android 新手,我创建了一个小应用程序来跟踪我的位置。现在我需要做的是将这些位置以 JSON 格式发送到外部 API,并且我也能够让它工作。
问题是,如果网络连接不可用怎么办?如果我关闭我的设备怎么办?
如果网络连接再次可用,我需要做一些事情来将这些位置保留在队列中并将它们发送到 API。
我考虑过将它们放在 SQLite 中,但我担心性能。也许一些可以处理队列的 IntentService?你有什么建议?我应该如何解决这些问题?
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>