如果没有互联网连接,如何在Volley中排队请求?

时间:2017-01-19 03:34:42

标签: android

是否可以在Volley中排队请求,这样如果目前没有互联网连接,它会等到互联网连接可用,然后发出请求?

查看Volley的文档,我非常确定我必须在setRetryPolicy()对象上调用Request,并传入RetryPolicy个对象。但是,我不太确定如何实现它的retry()方法来执行所需的行为。

Volley文档并没有告诉我们何时会调用retry()方法,所以我不确定如何解决这个问题:

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

1 个答案:

答案 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.
        }    
    }
}