相关疑难解决方法(0)

Firebase脱机功能和addListenerForSingleValueEvent

每当我使用addListenerForSingleValueEventsetPersistenceEnabled(true),我只能设法从服务器获取本地脱机副本DataSnapshot不是更新DataSnapshot.

但是,如果我用addValueEventListenersetPersistenceEnabled(true),我可以得到的最新副本DataSnapshot从服务器.

这是正常的,addListenerForSingleValueEvent因为它只搜索DataSnapshot本地(离线)并在成功检索DataSnapshot ONCE(离线或在线)后删除其侦听器?

android firebase firebase-realtime-database

53
推荐指数
1
解决办法
1万
查看次数

无法在Firestore中禁用脱机数据

从我删除数据后,我Firestore Database需要花Android app一些时间才能意识到数据已被删除,并且我认为它是由于自动数据缓存而发生的.我的应用程序与离线使用无关,我想禁用此功能...

我在我的自定义中添加了这个Application Class:

import android.app.Application;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.FirebaseFirestoreSettings;

public class ApplicationClass extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        FirebaseFirestore db=FirebaseFirestore.getInstance();
        FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder()
                .setPersistenceEnabled(false)
                .build();
        db.setFirestoreSettings(settings);
    }
}
Run Code Online (Sandbox Code Playgroud)

在关闭互联网连接后将问题重新打开(当应用程序仍在运行时,在后台或不在时) - Firestore module似乎失去了与服务器的连接,并且它使得与预期的操作相反 - 而不是停止从缓存中获取数据,它从缓存中获取数据.

例如,调试此代码将始终显示isFromCachetruedocumentSnapshot为空(即使server侧面 - 它不是空的):

usersRef.document(loggedEmail).collection("challenges_received").get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
    @Override
    public void onSuccess(QuerySnapshot documentSnapshots) {
        boolean isFromCache=documentSnapshots.getMetadata().isFromCache();
        if (!documentSnapshots.isEmpty()) { …
Run Code Online (Sandbox Code Playgroud)

android firebase google-cloud-firestore

21
推荐指数
2
解决办法
5158
查看次数

ObserveSingleEvent 返回旧数据

我想在应用程序启动时获取所需的应用程序版本号。但是我拿不到正确的钥匙。

我有这个代码要获取。我使用观察单个事件是因为我使用这种方法来检查所需的应用程序版本号。此方法仅在应用开始进行检查时触发。

func getVersion(completionHandler: @escaping (Result<Any?>) -> ()) {

     let ref: DatabaseReference! = Database.database().reference().child("version").child("IOS")

     ref?.observeSingleEvent(of: .value , with: { snapshot in

         if snapshot.exists() {    
            let recent = snapshot.value as!  NSDictionary  
            print(recent)
         }
     })
}
Run Code Online (Sandbox Code Playgroud)

但它正在返回旧的结果?我已isPersistenceEnabled在我的Appdelegate.

这是数据库结构:

在此处输入图片说明

当我使用Database.database().reference().child("version").child("IOS"). snapshot.exists时我没有得到任何结果, 当我使用它时。

我以前拥有的是: - 版本 | IOS - 1.0

当我使用Database.database().reference().child("version"), namely {iOS => 1.0}. 我不明白,因为这是我的旧结构。

ios firebase swift firebase-realtime-database

5
推荐指数
1
解决办法
1504
查看次数

Firebase如何与共享数据同步?

我使用Firebase来处理Android应用的Auth主题.我还在Firebase上保存了一个用户配置文件,其中包含用户ID和用户可以在Android应用中更新的额外选项.

启动时,应用程序会检查身份验证和身份验证.它重新加载用户配置文件(在Firebase上),然后在应用程序上更新我的userInstance.

Firebase在应用级别设置为离线功能.userInstance POJO在日志时与Firebase同步,并在unlog时停止同步.

我有一个特殊的参数,在我的用户配置文件中,我可以更改(作为管理员).

每次我在Firebase控制台上更新它时,它会在应用程序重新启动时替换为之前的值.

怎么会发生这种情况?

BTW:1 /如果多个客户端有不同的本地值,基于合并数据的机制?

这是更简单的代码,我试图重现错误.:

MyApplication.java

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Firebase.setAndroidContext(this);
        Firebase.getDefaultConfig().setLogLevel(Logger.Level.DEBUG);
        Firebase.getDefaultConfig().setPersistenceEnabled(true);


    }
}
Run Code Online (Sandbox Code Playgroud)

主要活动

public class MainActivity extends AppCompatActivity {

    Firebase ref;
    User user;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ref = new Firebase("https://millezim-test.firebaseIO.com").child("user");
        ref.keepSynced(true);

        Button br = (Button) findViewById(R.id.b_read);
        Button bs = (Button) findViewById(R.id.b_save);
        final TextView tv_r = (TextView) findViewById(R.id.tv_value_toread);
        final EditText tv_s = (EditText) findViewById(R.id.tv_value_tosave);

        user = new User();

        bs.setOnClickListener(new View.OnClickListener() …
Run Code Online (Sandbox Code Playgroud)

java database android synchronization firebase

4
推荐指数
1
解决办法
5637
查看次数