我了解Firebase能够在离线时本地存储数据,并在设备重新联机时执行写入。
但是我想在我的应用程序中为某些写入禁用此功能,因为我想阻止用户对数据库进行垃圾邮件。谢谢。
答案 0 :(得分:1)
根据弗兰克的说法,我们无法控制写入队列。因此,我决定编写一个实用程序来检查网络连接。只有在有连接的情况下才会执行写入。
NetworkUtil.java:
public class NetworkUtil {
private Context context;
public NetworkUtil(Context context) {
this.context = context;
}
public boolean hasNetwork() {
ConnectivityManager mConnectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
final NetworkInfo info = mConnectivityManager.getActiveNetworkInfo();
if (info == null || !info.isConnected())
return false;
else
return true;
}
}
我将这些内容添加到我的活动中:
/* Check for network */
NetworkUtil networkUtil = new NetworkUtil(getApplicationContext());
boolean hasNetwork = networkUtil.hasNetwork();
if (hasNetwork)
/* perform write to firebase */
答案 1 :(得分:0)
所有写入都排队,直到再次连接到Firebase服务器。没有API来控制哪些写入排队,哪些不排队。
唯一的漏洞是transactions当前没有持久化到磁盘,因此在重新启动应用程序时会丢失。
答案 2 :(得分:0)
不确定是否有帮助,但是数据库有purgeOutstandingWrites()
com.google.firebase.database.FirebaseDatabase.getInstance(app).purgeOutstandingWrites();
和clearPersistence()
(用于Firestore)。
FirebaseFirestore.getInstance().clearPersistance();