gpt4 book ai didi

带有 Volley 的 Android 离线请求

转载 作者:可可西里 更新时间:2023-11-01 18:47:28 25 4
gpt4 key购买 nike

我想给我的用户提供更好的离线用户体验,因此,我想构建一个 Service 来存储所有 POSTDELETE, PUT(GET 没有意义,因为没有网络的 GET 调用是缓存调用)请求用户离线并将它们发送到一旦用户连接到互联网,服务器就会立即启动。我希望它是持久的:即使应用程序被终止,数据也会被发送,以免缓存和服务器数据之间出现不一致。

我对 Google Volley 和 Android Networking API 非常熟悉 --> 我知道如何检测没有网络、如何预取数据、缓存它们等...

但是有关于这个主题的要点或图书馆吗?我知道最新的 Facebook 版本实现了这样一个系统,但我想知道他们是怎么做到的(我的意思是,我知道那里正在使用 Service 但他们到底是怎么做到的,不知道!)。有人对此有想法吗?有经验吗?

最佳答案

您需要使用 BroadcastReceiver 来监听网络变化事件。使用以下操作在您的 AndroidManifest.xml 中定义 broadcastReciver。

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

还将以下权限添加到您的 list 文件中 -

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

网络广播接收器 -

public class NetworkBroadcastReceiver extends BroadcastReceiver {

@Override
public void onReceive(final Context context, final Intent intent) {

if(isInternetConnected(context)) {
//Do something i.e. trigger an API call or start a IntentService etc.
}
}


public boolean isInternetConnected(Context context) {
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
}

这就是您在连接到 Internet 后立即提出请求所需要做的所有事情。

要缓存数据,我建议您解析服务器响应并将其保存在数据库中以供离线使用。每次成功请求时,将新数据保存在数据库中并丢弃旧数据。当用户启动应用程序时,首先从数据库中加载数据,然后触发 Volley 请求,如果请求成功,则将新数据加载到应用程序中,将其存储到数据库中,并删除旧数据。因此,如果请求失败,用户仍然可以看到之前成功请求的旧数据。

处理app和server数据不一致,需要用到SyncAdapter。 SyncAdapter 为后台定期同步提供了很好的支持。只需将同步代码放在 SyncAdapter 的 onPerformSync() 方法中即可。在以下两种情况下它可能不起作用 -1.如果用户没有连接到互联网2. 如果用户设备关闭

要处理这些情况,请使用我在上面的回答中解释的 BroadCastReceiver 来触发 SyncAdapter。还要将以下操作添加到 AndroidManifest.xml 中的接收器以监听设备的启动完成事件。

<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />

如果您需要使用编码示例进行更深入的解释,请告诉我。希望对你有帮助

关于带有 Volley 的 Android 离线请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31628062/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com