Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如果数据未立即同步到服务器,如何在插入firebase时引发异常?_Android_Firebase - Fatal编程技术网

Android 如果数据未立即同步到服务器,如何在插入firebase时引发异常?

Android 如果数据未立即同步到服务器,如何在插入firebase时引发异常?,android,firebase,Android,Firebase,我正在向Firebase插入一些值。如果数据在几秒钟延迟后未同步到服务器,我想将插入操作标记为失败。 我尝试了onCompleteListener和onFailureListener上的Task,但是onFailureListener如果设备脱机,则不会触发,onCompleteListener在与firebase服务器成功同步后立即触发(设备联机)。 如果设备脱机,我想立即启动故障监听器。如何实现这一点?您可以使用以下功能在插入值之前检查网络的可用性 public static boolean

我正在向Firebase插入一些值。如果数据在几秒钟延迟后未同步到服务器,我想将插入操作标记为失败。 我尝试了
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)的连接不可用。因此,我想检查对服务器的低级写入操作是否成功。在这种情况下,您的代码将无法工作。我已更新了答案