是否可以在Volley中排队请求,这样如果目前没有互联网连接,它会等到互联网连接可用,然后发出请求?
查看Volley的文档,我非常确定我必须在setRetryPolicy()
对象上调用Request
,并传入RetryPolicy
个对象。但是,我不太确定如何实现它的retry()
方法来执行所需的行为。
Volley文档并没有告诉我们何时会调用retry()
方法,所以我不确定如何解决这个问题:
http://afzaln.com/volley/com/android/volley/RetryPolicy.html#retry(com.android.volley.VolleyError)
答案 0 :(得分:3)
这是一种不太涉及Volley Request.retry()
方法的方法:
首先,每次我发出一个Volley请求时,我首先测试是否有任何使用此功能的互联网连接:
public boolean isInternetConnected(Context context) {
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
如果没有任何互联网连接,我将请求保存在SharedPreferences文件中。 (你可能会争辩说这是一种存储未决网络请求的好方法,但我只是需要一些东西来快速启动和运行。如果你愿意,可以使用数据库。)
我在清单中定义了一个BroadcastReceiver来响应互联网连接的变化。
<receiver android:name=".NetworkBroadcastReceiver" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
然后在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.
}
}
}