Android Studio: программа для отображения данных текущих пользователей с Firebase - PullRequest
0 голосов
/ 19 февраля 2019

Я делаю приложение, которое после входа в систему вы можете просматривать данные базы данных реального времени (имя и адрес электронной почты), но только ваши собственные данные (от пользователя, который вошел в систему).Например, если вы войдете в систему с пользователем "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 голосов
/ 20 февраля 2019

Если вы хотите получить адрес электронной почты и имя из базы данных 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 Authentication, вы можете получить свою электронную почту по этой строке и установить текст

String email = user.getEmail();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...