我希望没有互联网连接的用户进行的任何数据修改都会被缓存,并在他恢复互联网连接时上传到CloudFirestore Firebase。 这里我的代码应该保存数据更新:
mSaveProfileUpdatesImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FirebaseFirestore db = FirebaseFirestore.getInstance();
final DocumentReference docRef = db.collection("users").document(mFirebaseAuth.getCurrentUser().getUid());
db.runTransaction(new Transaction.Function<Void>() {
@Nullable
@Override
public Void apply(@NonNull Transaction transaction) throws FirebaseFirestoreException {
User user = transaction.get(docRef).toObject(User.class);
if (mUsernameTextInputLayout.getEditText() != null)
user.setUsername(mUsernameTextInputLayout.getEditText().getText().toString());
if (mEmailTextInputLayout.getEditText() != null)
user.setEmail(mEmailTextInputLayout.getEditText().getText().toString());
if (mPhoneTextInputLayout.getEditText() != null)
user.setPhone(mPhoneTextInputLayout.getEditText().getText().toString());
if (mAddressTextInputLayout != null && user.getTempAddress() != null)
transaction.set(docRef, user);
return null;
}
}).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Snackbar.make(findViewById(android.R.id.content), "Failed to save updates",
Snackbar.LENGTH_SHORT).show();
}
});
}
});
当缺少互联网连接时,会显示Snackbar,但是当连接被激活并准备好更新数据时,会始终显示Snackbar。
答案 0 :(得分:0)
将它放在OnCreate()方法的应用程序类中。
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
答案 1 :(得分:0)
离线使用不支持交易 - 无法缓存或保存这些交易以供日后使用。这是因为事务绝对需要与服务器进行往返通信,以确保事务内的代码成功完成。