【问题标题】:Retry Post request when device is back online设备重新联机时重试发布请求
【发布时间】:2013-04-02 14:11:53
【问题描述】:

我有一个小型 android 应用程序向服务器发出一些 POST 请求问题是我希望我的应用程序能够在请求失败时在检查网络的可用性后重试 Post设备。如何做到这一点?有必要实现服务和数据库来持久化我发送的数据吗?我已经阅读了有关警报管理器的内容,但我不知道如何通过我的活动来实现这一点。

【问题讨论】:

    标签: android rest service httprequest alarmmanager


    【解决方案1】:

    您不一定需要始终运行的服务。当 POST 或任何 Web 请求失败时,您可以对其进行排队。 (以某种方式存储请求 [Shared params, db])。然后使用广播接收器并订阅连接更改的意图。在接收器中,检查您现在是否有连接。如果您并且队列中有东西,那么您可以生成一个服务来处理队列。

    你应该感兴趣的两个确切的广播是这些

     android.net.wifi.WIFI_STATE_CHANGED
     android.net.wifi.supplicant.CONNECTION_CHANGE
    

    您可以像这样在清单中向他们注册

    <receiver android:name=".BroadcastReceiver">
        <intent-filter>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            <!-- .... -->
        </intent-filter>
    </receiver>
    

    在该广播接收器中,您可以使用此代码查看您是否有网络连接。

    public boolean isOnline() {
        cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if(cm == null)
            return false;
    
        final NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
        if (activeNetwork != null && activeNetwork.getState() == NetworkInfo.State.CONNECTED) {
            return true;
        } else {
            return false;
        } 
    }
    

    对于此代码,您还需要这些权限

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

    【讨论】:

    • 感谢您的回答,还有一个问题,即使用户离开活动,此广播接收器也能正常工作?
    • 是的,当然。无论您的活动是否正在运行,广播接收器都会收到通知。
    【解决方案2】:

    创建一个扩展 BroadcastReceiver 的类,然后像这样注册该类: registerReceiver(new BroadcastReceiverExtension, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));

    网络上的任何变化都会触发这个广播。

    您可以查看 Intent extras ConnectivityManager.EXTRA_NETWORK_INFO、ConnectivityManager.EXTRA_OTHER_NETWORK_INFO、ConnectivityManager.EXTRA_NO_CONNECTIVITY 和 ConnectivityManager.EXTRA_REASON,了解有关收到的更改的更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-11
      • 1970-01-01
      • 2019-06-08
      • 1970-01-01
      • 2019-05-19
      • 2015-07-29
      • 2016-03-04
      • 2018-12-18
      相关资源
      最近更新 更多