小编Thi*_*ryC的帖子

如何绕过Firebase缓存刷新数据(在Android应用中)?

在Android应用程序上,必须在大多数时间离线工作,当它在线时,为ie做一些同步操作:

User myUser =  MyclientFacade.getUser();
If (myUser.getScore > 10) {
    DoSomething() 
}
Run Code Online (Sandbox Code Playgroud)

用户是Firebase填写的POJO;

激活Firebase缓存时会出现此问题

Firebase.getDefaultConfig().setPersistenceEnabled(true);
Run Code Online (Sandbox Code Playgroud)

并且用户已经在缓存中,并且第三方(甚至是其他设备)在Firebase DB上更新数据.实际上,当我查询Firebase以获取用户时,我首先从缓存中获取数据,然后使用来自Firebase服务器的最新数据获取第二个更改事件,但为时已晚!

我们来看看同步方法MyclientFacade.getUser():

Public User  getUser()  {
  Firebase ref = myFireBaseroot.child("User").child(uid);
  ref.keepSynced(true);
  /* try {
    Thread.sleep(3000);
 } catch (InterruptedException e) {
    e.printStackTrace();
 }*/
final CountDownLatch signal = new CountDownLatch(1);

ref.addListenerForSingleValueEvent(new ValueEventListener() {
//ref.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
       this.user = dataSnapshot.getValue(User.class);
       signal.countDown();
    }
    @Override
    public void onCancelled(FirebaseError firebaseError) {
       signal.countDown();
    }
});
signal.await(5, TimeUnit.SECONDS);
ref.keepSynced(false);
return this.user;
}
Run Code Online (Sandbox Code Playgroud)

如果我使用addValueEventListeneraddListenerForSingleValueEvent …

android firebase firebase-realtime-database

34
推荐指数
2
解决办法
2万
查看次数

如何使用Firebase查询equalTo(值,键)?

作为firebase中的新手,我试图在这个简单的用例中模仿一种"where子句"请求来检索用户的钱包:

User
   48bde8f8-3b66-40bc-b988-566ccc77335c
      email: "toto@acme.com"
      username: "userTest1"

UserWallet
   F4PvtvNT2Z
      coins: 26
      someList
         elemet1
         elemet2 
      user: "48bde8f8-3b66-40bc-b988-566ccc77335c"
Run Code Online (Sandbox Code Playgroud)

首先,我尝试像这样编写我的请求:

Firebase root = new Firebase("https://myApp.firebaseio.com/");
Firebase ref = root.child("UserWallet");
Query query = ref.equalTo("48bde8f8-3b66-40bc-b988-566ccc77335c", "user");
Run Code Online (Sandbox Code Playgroud)

结果是null,所以我写了这个查询:

Query query = ref.orderByChild("user").equalTo("48bde8f8-3b66-40bc-b988-566ccc77335c", "user");
Run Code Online (Sandbox Code Playgroud)

结果再次为null.检索钱包的唯一方法是使用此查询:

Query query = ref.orderByChild("user").equalTo("48bde8f8-3b66-40bc-b988-566ccc77335c");
Run Code Online (Sandbox Code Playgroud)

那么在使用"equalTo()"之前我是否应该始终使用en"orderByChild()"查询?
那么,查询"equalTo(String value,String key)"与"equalTo(String value)"的目的是什么,因为只有第二个才能正常工作?

java android firebase firebase-realtime-database

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

Firebase Android:onDataChange()事件总是在主UI线程中执行?

在使用Firebase的Android应用程序中,一旦Firebase返回查询答案,我需要在后台执行长时间操作.例如:

query.addListenerForSingleValueEvent(new ValueEventListener() {
   @Override
   public void onDataChange(DataSnapshot data) {
         dosomething very long. . .
         then call a callback forUI thread
   }
Run Code Online (Sandbox Code Playgroud)

我知道firebase在异步模式下执行查询,但该onDataChange()方法似乎总是在主UI线程中执行,即使我尝试在自定义后台线程中调用查询.

有谁知道如何管理这个用例?

android firebase firebase-realtime-database

17
推荐指数
2
解决办法
5444
查看次数

在Cloud Firestore中,为什么不能"单个批量"删除集合(可以使用实时数据库)?

使用Firebase实时数据库,我们只需通过调用remove () 父节点就可以删除一个包含单个命令的大量项目(节点已被删除,所有节点也都是子节点).

但是根据Firestore的文档(https://firebase.google.com/docs/firestore/manage-data/delete-data#collections):
要删除一个Collection,我们必须编写一个将遍历所有它的批处理文件并逐一删除.

这根本没有效率.是因为Firestore是测试版还是在一次调用中删除整个节点(Collection)在结构上是不可能的?

firebase google-cloud-firestore

16
推荐指数
3
解决办法
4735
查看次数

Spring批处理jpaPagingItemReader为什么有些行没有被读取?

我正在使用Spring Batch(3.0.1.RELEASE)/ JPA和HSQLBD服务器数据库.我需要浏览整个表(使用分页)和更新项目(逐个).所以我使用了jpaPagingItemReader.但是当我运行该作业时,我可以看到跳过了一些行,并且跳过的行数等于页面大小.因为,如果我的表有12行而jpaPagingItemReader.pagesize = 3,则作业将显示:第1,2,3行,然后第7,8,9行(所以跳过第4,5,6行)...你能告诉我是什么我的代码/配置有问题,或者这可能是HSQLDB分页的问题?以下是我的代码:

[编辑]:问题在于我的ItemProcessor执行对POJO实体的修改.由于JPAPagingItemReader在每次读取之间进行刷新,因此实体会更新((这就是我想要的).但似乎游标分页也会增加(如日志中所示:行ID 4,5和6已经过跳过).我该如何处理这个问题?

@Configuration
@EnableBatchProcessing(modular=true)
public class AppBatchConfig {
  @Inject
  private InfrastructureConfiguration infrastructureConfiguration;  
  @Inject private JobBuilderFactory jobs;
  @Inject private StepBuilderFactory steps;

  @Bean  public Job job() {
     return jobs.get("Myjob1").start(step1()).build();
  }
  @Bean  public Step step1() {  
      return steps.get("step1")
                .<SNUserPerCampaign, SNUserPerCampaign> chunk(0)
                .reader(reader()).processor(processor()).build();   
  }
  @Bean(destroyMethod = "")
@JobScope 
public ItemStreamReader<SNUserPerCampaign> reader() String trigramme) {
    JpaPagingItemReader reader = new JpaPagingItemReader();
    reader.setEntityManagerFactory(infrastructureConfiguration.getEntityManagerFactory());
    reader.setQueryString("select t from SNUserPerCampaign t where t.isactive=true");
    reader.setPageSize(3));
    return reader;
}
 @Bean @JobScope
 public ItemProcessor<SNUserPerCampaign, SNUserPerCampaign> processor() { …
Run Code Online (Sandbox Code Playgroud)

jpa spring-batch

8
推荐指数
3
解决办法
2万
查看次数