我正在做一个应用程序,登录后,您可以查看实时数据库的数据(名称和电子邮件),但只能查看自己的数据(来自已登录的用户)。例如,如果使用用户“ 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"
}
}
}
}
我附上我数据库的图片:
非常感谢您!
答案 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();