Android 如果数据未立即同步到服务器,如何在插入firebase时引发异常?
我正在向Firebase插入一些值。如果数据在几秒钟延迟后未同步到服务器,我想将插入操作标记为失败。 我尝试了Android 如果数据未立即同步到服务器,如何在插入firebase时引发异常?,android,firebase,Android,Firebase,我正在向Firebase插入一些值。如果数据在几秒钟延迟后未同步到服务器,我想将插入操作标记为失败。 我尝试了onCompleteListener和onFailureListener上的Task,但是onFailureListener如果设备脱机,则不会触发,onCompleteListener在与firebase服务器成功同步后立即触发(设备联机)。 如果设备脱机,我想立即启动故障监听器。如何实现这一点?您可以使用以下功能在插入值之前检查网络的可用性 public static boolean
onCompleteListener
和onFailureListener
上的Task
,但是onFailureListener
如果设备脱机,则不会触发,onCompleteListener
在与firebase服务器成功同步后立即触发(设备联机)。
如果设备脱机,我想立即启动故障监听器。如何实现这一点?您可以使用以下功能在插入值之前检查网络的可用性
public static boolean isNetworkAvailable(Context context){
ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = manager.getActiveNetworkInfo();
return info != null;
}
更新
您可以检查互联网是否正常工作,即使它已连接
public static boolean hasActiveInternetConnection(Context context){
if(isNetworkAvailable(context)) {
try {
HttpURLConnection connection = (HttpURLConnection) (new URL("http://clients3.google.com/generate_204")).openConnection();
connection.setRequestProperty("User-Agent", "Test");
connection.setRequestProperty("Connection", "close");
connection.setReadTimeout(1500);
connection.connect();
return (connection.getResponseCode() == 204 && connection.getContentLength() == 0);
} catch (IOException e){
Log.e("ERROR", "Error checking internet connection");
}
} else Log.e("ERROR", "No network available");
return false;
}
您可以创建自己的异常,也可以根据需要创建自己的listenerwith接口。如果没有与互联网的连接,它将帮助您拨打所需的代码。我的应用程序的用户有时只使用数据连接访问著名的服务,如Facebook、WhatsApp等。他们从电信运营商购买的数据订阅仅用于使用Facebook、WhatsApp等。在这种情况下,调用上述函数检查网络可用性返回true。但实际上,我的应用程序或其他应用程序(不包括Facebook应用程序和WhatsApp)的连接不可用。因此,我想检查对服务器的低级写入操作是否成功。在这种情况下,您的代码将无法工作。我已更新了答案