尝试从数据库读取时Firebase权限被拒绝但我可以写(Android)

时间:2017-03-09 15:40:41

标签: android firebase firebase-realtime-database firebase-authentication

编辑:我更新了retrieveData()。现在我的方法在onChildAdded()中显示我的数据库中正确数量的元素,但在我尝试将Info post分配给postSnapshot.getValue(Info.class)时收到错误。这是我的Info类没有setter,getters等

  public Info(String question,String answer,String a,String b,String c,String d){
        this.question=question;
        this.a=a;
        this.b=b;
        this.c=c;
        this.d=d;
        this.answer=answer;
    }
    public Info(){

    }
}





public void retrieveData(){
                Log.e("burdayım sa","saaaaaaaaaaa");
                databaseReference.addChildEventListener(new ChildEventListener() {
                    @Override
                    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                        Log.e("Count " ,""+dataSnapshot.getChildrenCount());
                        for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
                            Info post = postSnapshot.getValue(Info.class);
                            Log.e("Get Data", post.getQuestion());
                        }
                    }

                    @Override
                    public void onChildChanged(DataSnapshot dataSnapshot, String s) {
                        Log.e("Count " ,""+dataSnapshot.getChildrenCount());
                        for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
                            Info post = postSnapshot.getValue(Info.class);
                            Log.e("Get Data", post.getQuestion());
                        }
                    }

                    @Override
                    public void onChildRemoved(DataSnapshot dataSnapshot) {

                    }

                    @Override
                    public void onChildMoved(DataSnapshot dataSnapshot, String s) {

                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {
                        Log.e("The read failed: " ,databaseError.getMessage());
                    }

        });
    }
  @Override
            public void onCancelled(FirebaseError firebaseError) {
                Log.e("The read failed: " ,firebaseError.getMessage());
            }
        });
    }

这是错误:com.google.firebase.database.DatabaseException:无法将java.lang.String类型的对象转换为com.example.sahilliolu.rqagame.Info 类型

所以,这是我接收数据的代码。我在前一个活动中处理身份验证,我可以通过此活动向我的数据库写入内容(我没有使用firebase对象)但是当我尝试获取一个对象时,它会拒绝我的权限。我怎么解决这个问题?以下是我写入db的方法。

 firebaseAuth=FirebaseAuth.getInstance();
        if(firebaseAuth.getCurrentUser()==null){
            finish();
            startActivity(new Intent(this,LoginActivity.class));
        }
        FirebaseUser user=firebaseAuth.getCurrentUser();
        databaseReference= FirebaseDatabase.getInstance().getReference().child("questions");



Info info=new Info(question,answer,a,b,c,d);
                newDatabaseReference=databaseReference.push();
                newDatabaseReference.setValue(info);
                Toast.makeText(getApplicationContext(),"Your question is created",Toast.LENGTH_SHORT).show();

2 个答案:

答案 0 :(得分:0)

您正在使用旧版SDK和新SDK:

// legacy
firebase.setAndroidContext(this);
firebase=new Firebase("https://mylink");

// new
FirebaseUser user=firebaseAuth.getCurrentUser();
databaseReference= FirebaseDatabase.getInstance().getReference().child("questions");

这不是好习惯,可能是问题的根源。

您应该专门使用新的SDK。从构建依赖项中删除此行并更新代码:

compile 'com.firebase:firebase-client-android:2.X.X'

Upgrade Guide很有用。

答案 1 :(得分:0)

你指的是错误的节点,它不包含你所需的变量,只包含一个字符串(可能只是个问题)