Android Studio:使用Firebase显示当前用户数据的程序

时间:2019-02-19 12:43:15

标签: android firebase firebase-realtime-database

我正在做一个应用程序,登录后,您可以查看实时数据库的数据(名称和电子邮件),但只能查看自己的数据(来自已登录的用户)。例如,如果使用用户“ hi@gmail.com”登录,则只会看到您的电子邮件和姓名。登录活动已经完成,并且可以与FireBase身份验证一起使用。但是,当我登录时,没有显示任何数据。我的错误在哪里?

我附上我的Android Studio代码:

import android.view.ViewGroup;
import android.widget.TextView;

import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.firebase.ui.database.FirebaseRecyclerOptions;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;



public class Documentation extends AppCompatActivity {
RecyclerView recyclerView;

FirebaseDatabase firebaseDatabase;
DatabaseReference databaseReference;
FirebaseUser user;
String uid_number;





FirebaseRecyclerOptions<Post> options;
FirebaseRecyclerAdapter<Post,MyRecyclerViewHolder> adapter;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    recyclerView=(RecyclerView)findViewById(R.id.recycler_view);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));


    firebaseDatabase=FirebaseDatabase.getInstance();
    databaseReference=firebaseDatabase.getReference("users");
    user= FirebaseAuth.getInstance().getCurrentUser();
    assert user != null;
    uid_number=user.getUid();
    displayComment();

}

private void displayComment() {
    options =
            new FirebaseRecyclerOptions.Builder<Post>()
            .setQuery(databaseReference,Post.class)
            .build();


    adapter =
            new FirebaseRecyclerAdapter<Post, MyRecyclerViewHolder>(options) {
                @Override
                protected void onBindViewHolder(@NonNull MyRecyclerViewHolder holder, int position, @NonNull Post model) {

                    holder.txt_name.setText(model.getName());
                    holder.txt_email.setText(model.getEmail());




                }

                @NonNull
                @Override
                public MyRecyclerViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
                    View itemView = LayoutInflater.from(getBaseContext()).inflate(R.layout.post_item,viewGroup,false);
                    return new MyRecyclerViewHolder(itemView);
                }
            };

    adapter.startListening();
    recyclerView.setAdapter(adapter);
}
}

在我的Firebase规则中,我有:

   {
  "rules": {
    "users": {
      "$uid": {
        ".read": "auth != null && auth.uid == $uid"
      }
    }
  }
}

我附上我数据库的图片:

enter image description here

非常感谢您!

1 个答案:

答案 0 :(得分:0)

如果您希望从Firebase数据库中获取电子邮件和名称,请首先同时设置数据库引用和变量。

String email, name;
DatabaseReference databaseReference = database.getReference("Users").child(firebaseAuth.getCurrentUser().getUid())

然后创建一个使用ValueEventListener的方法

databaseReference.addValueEventListener(new ValueEventListener(){
    @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
          email = dataSnapshot.child("email").getValue(String.class);
          name = dataSnapshot.child("name").getValue(String.class);
 }
    @Override
        public void onCancelled(DatabaseError error) {
            // Failed to read value
            Log.w(TAG, "Failed to read value.", error.toException());
        }
    });

}

然后将其设置为您要输入的文本。

如果来自Firebase身份验证,则可以通过此行获取电子邮件并对其设置文本

String email = user.getEmail();