相关疑难解决方法(0)

是否可以在Firebase中发送同步请求?

我正在使用Firebase Android SDK并且对发送同步请求而不是异步感兴趣.根据文档,在任何请求中都会显示回调.但是同步性呢?

谢谢!

android firebase

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

是否可以从Firebase同步加载数据?

我正在尝试使用通过Firebase连接的对等方获取的数据来更新我的Android应用中的WebView部分.为此,执行将返回所需数据的阻塞操作可能会有所帮助.例如,Chat示例的实现将等待另一个聊天参与者在push.setValue()返回之前写入某些内容.Firebase可以实现这样的行为吗?

android firebase firebase-realtime-database

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

在Android中等待Firebase异步检索数据

我需要存储他自己异步的FireBase getValue方法的结果.我不能使用类似"onPostExecute()"的东西,为了我的目的,我无法执行"onDataChange()"的所有操作,因为我需要在将来的其他活动中引用一些参考.

这是我的片段检索数据:

    List<Village> villages = new LinkedList<>();
    Firebase ref = new Firebase("MYFIREBASEURL").child("village");
    ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot snapshot) {
            spinnerArray.clear();
            for (DataSnapshot postSnapshot : snapshot.getChildren()) {
                Village v = postSnapshot.getValue(Village.class);
                villages.add(v);
            }
        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {
            System.out.println("The read failed: " + firebaseError.getMessage());
        }
    });
Run Code Online (Sandbox Code Playgroud)

如果我尝试从"onDataChange"中读取村庄,我自然会为他的异步生活读取空值.有一种方法可以确保调用onDataChange吗?

android synchronization asynchronous firebase firebase-realtime-database

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

如何检查firestore中是否已经存在某些数据

在将新数据添加到 Firestore 之前,我想检查数据库中是否存在相同类型的数据。如果已经存在数据意味着我想防止用户在数据库中输入重复数据。在我的情况下,如果已经存在同一时间的预订,它就像预约预订,我想防止用户在同一时间预订。我尝试使用查询功能,但它不能防止重复数据输入。请帮助我

private boolean alreadyBooked(final String boname, final String bodept, final String botime) {
        final int[] flag = {0};
        CollectionReference cref=db.collection("bookingdetails");
        Query q1=cref.whereEqualTo("time",botime).whereEqualTo("dept",bodept);
        q1.get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
            @Override
            public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
                for (DocumentSnapshot ds : queryDocumentSnapshots) {
                    String rname, rdept, rtime;
                    rname = ds.getString("name");
                    rdept = ds.getString("dept");
                    rtime = ds.getString("time");
                    if (rdept.equals(botime)) {
                        if (rtime.equals(botime)) {
                            flag[0] = 1;
                            return;
                        }
                    }
                }
            }
        });
        if(flag[0]==1){
            return true;
        }
        else {
            return false;
        }
    }
Run Code Online (Sandbox Code Playgroud)

android firebase google-cloud-firestore

8
推荐指数
1
解决办法
4834
查看次数

Android:等待firebase valueEventListener

我正在尝试使用Semaphore等待我的firebase valueEventListener.我有一个用户信息活动,有6个不同的字段,用户必须填写.当用户保存他/她的信息时,我想进行"全有或全无"类型的检查.某些用户信息无法复制...例如用户名,电子邮件和电话号码.我正在使用firebase,目前一般的想法是这样的格式:

void saveUserInfo(){
    if(field1 exist in database){
        return;
    }
    .
    .
    .
    if(field6 exist in database){
        return;
    }

    savefield1();
    .
    .
    .
    savefield6();
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是检查数据库中是否已存在该值的方法.这是我目前的方法:

   public boolean alreadyInUse(String key, String value) throws InterruptedException {

    final StringBuilder done = new StringBuilder("");
    final Semaphore semaphore = new Semaphore(0);

    mDatabase.child(key).child(value).addListenerForSingleValueEvent(new ValueEventListener() {

        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            String result = dataSnapshot.getValue(String.class);
            if(result == null){
                Log.d("WorkoutLog", "result: null");
                done.append("false");
                semaphore.release();
                return;
            }
            else if(result.equals(uID)){
                Log.d("WorkoutLog", "result: " + result.toString());
                done.append("false");
                semaphore.release();
                return; …
Run Code Online (Sandbox Code Playgroud)

android asynchronous semaphore firebase firebase-realtime-database

5
推荐指数
2
解决办法
7329
查看次数

getContactsFromFirebase()方法返回一个空列表

public List<String> getContactsFromFirebase(){
    FirebaseDatabase.getInstance().getReference().child("Users")
            .addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                        Users user = snapshot.getValue(Users.class);
                        assert user != null;
                        String contact_found = user.getPhone_number();
                        mContactsFromFirebase.add(contact_found);
                        Log.i("Test", mContactsFromFirebase.toString());
                    }

                }
                @Override
                public void onCancelled(DatabaseError databaseError) {
                }
            });

    return mContactsFromFirebase;

}
Run Code Online (Sandbox Code Playgroud)

我似乎无法找到错误.在上面的代码中,当我调用日志时,我从中获取值mContactsFromFirebase,但该getContactsFromFirebase()方法返回一个空列表.请问你能帮帮我吗?

android firebase firebase-realtime-database

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

Firebase Android:如何顺序读取不同的引用

在我的一项Android活动中,我需要对Firebase执行多个查询,以最终向用户展示一些内容。

总之,我需要签入“ 用户”引用以检查他当前处于哪个课程步骤,然后我需要阅读课程内容以进行加载。

我目前正在做的是,我有两个像这样的嵌套侦听器:

ref1.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {

         ref2.addListenerForSingleValueEvent(new ValueEventListener() {
             @Override
             public void onDataChange(DataSnapshot dataSnapshot) {
                  //do the work
             }
         }); 
    }
}); 
Run Code Online (Sandbox Code Playgroud)

当您顺序需要它们时,是否有更好的方法来执行此查询?

android firebase firebase-realtime-database

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

从addValueEventListener Firebase中检索字符串

我想从addValueEventListener()我用来从数据库Firebase转售数据的方法中收到一个字符串.数据正确到达.

但是当确定从该方法中获取字符串以在另一个方法中使用它时,它什么也不返回.

你有提示吗?

我已经尝试过putExtras并且还有意创建了一个方法,但它没有用.

final DatabaseReference mPostReference = FirebaseDatabase.getInstance().getReference().child("user-daily").child(getUid()).child("2017-Year");
mPostReference.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        final ArrayList<String> labels = new ArrayList<String>();
        for (DataSnapshot data : dataSnapshot.getChildren()){
            final DailyItem dailyItem = data.getValue(DailyItem.class);
            labels.add(dailyItem.mese);



        }
        title.setText(labels.get(position));

        a = title.getText().toString();
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Toast.makeText(view.getContext(),"database error",
                Toast.LENGTH_SHORT).show();
    }
});

//this return null... why?
String title = a;
Run Code Online (Sandbox Code Playgroud)

string android firebase firebase-realtime-database

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

无法从具有void结果类型的方法返回值

我试图从Firebase数据库中获取一个特定的值,之前我做过,但现在当我尝试一些不同的东西时,它说"无法从具有void结果类型的方法返回值".

我猜我错过了一些编程规则,因为我是一名新的Java程序员.

这是我的代码:

public int getVotesForEvent(final String event_title) {
    firebaseRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if (dataSnapshot.child("Votes").exists()) {

                for (DataSnapshot event : dataSnapshot.child("Votes").getChildren()) {
                    String event_title2 = event.getKey();
                    if (event_title2.equals(event_title)) {
                        int count=Integer.parseInt(event.getValue().toString());
                        return count;

                    }


                }

            }
            else {
                int count = 0 ;
                return count;
            }
        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {

        }
    });
}
Run Code Online (Sandbox Code Playgroud)

错误出现在我试图返回计数的地方.

读完注释后,这是我的代码,现在该方法不会影响声明的变量计数,它保持0:

  int count=0;
public int getVotesForEvent(final String event_title) {

    firebaseRef.addValueEventListener(new ValueEventListener() {

        @Override
        public void onDataChange(DataSnapshot dataSnapshot) { …
Run Code Online (Sandbox Code Playgroud)

java android firebase

-1
推荐指数
1
解决办法
3916
查看次数