У меня проблема с переносом данных из базы данных Firebase в RecyclerView в моем приложении.Я хочу получить данные из дочернего элемента UserUid в отдельные CardViews, но я получаю только один CardView с последним дочерним элементом данных в базе данных.Я смотрел учебник на YouTube, но ничего не было сказано о получении данных с помощью dataSnapshot.Я полагаю, что я должен сделать это, используя Array для данных, потому что я получаю все свои data в Log , но не знаю, как это сделать.Пожалуйста, помогите и объясните.Заранее спасибо.
ViewDatabase.class
package com.mcarrow.mapsservicerunning;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
public class ViewDatabase extends AppCompatActivity {
private static final String TAG="ViewDatabase";
private FirebaseDatabase mFirebaseDatabase;
private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthListener;
private DatabaseReference myRef;
private RecyclerView mBlogList;
private String userID;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.view_database_layout);
mAuth=FirebaseAuth.getInstance();
mFirebaseDatabase= FirebaseDatabase.getInstance();
myRef=mFirebaseDatabase.getReference("users");
myRef.keepSynced(true);
mBlogList=(RecyclerView)findViewById(R.id.myrecycleview);
mBlogList.setHasFixedSize(true);
mBlogList.setLayoutManager(new LinearLayoutManager(this));
FirebaseUser user=mAuth.getInstance().getCurrentUser();
userID=user.getUid();
mAuthListener=new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user =firebaseAuth.getInstance().getCurrentUser();
if(user!=null){
Log.d(TAG,"Signed in"+user.getUid());
toastMessage("Signed In"+user.getEmail());
}else {
Log.d(TAG,"Signed Out");
toastMessage("Signed Out");
}
}
};
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
showData(dataSnapshot);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
private void showData(DataSnapshot dataSnapshot) {
final DataSnapshot contactSnapshot=dataSnapshot.child(userID);
final FirebaseRecyclerAdapter<UserInformation, BlogViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<UserInformation, BlogViewHolder>(UserInformation.class, R.layout.blog_row, BlogViewHolder.class, myRef) {
@Override
protected void populateViewHolder(BlogViewHolder viewHolder, UserInformation model, int position) {
Iterable<DataSnapshot>contactChildren=contactSnapshot.getChildren();
for (DataSnapshot contact : contactChildren) {
UserInformation uInfo = new UserInformation();
uInfo.setTitle(contact.getValue(UserInformation.class).getTitle());
uInfo.setDesc(contact.getValue(UserInformation.class).getDesc());
viewHolder.setTitle(uInfo.getTitle());
Log.d(TAG, "viewHolder " + uInfo.getTitle());
viewHolder.setDesc(uInfo.getDesc());
}
}
};
mBlogList.setAdapter(firebaseRecyclerAdapter);
}
public static class BlogViewHolder extends RecyclerView.ViewHolder{
View mView;
public BlogViewHolder(View itemView){
super(itemView);
mView=itemView;
}
public void setTitle(double title){
TextView post_title=(TextView)mView.findViewById(R.id.post_title);
post_title.setText(""+title);
}
public void setDesc(String desc){
TextView post_desc=(TextView)mView.findViewById(R.id.post_desc);
post_desc.setText(desc);
}
}
@Override
protected void onStart() {
super.onStart();
mAuth.addAuthStateListener(mAuthListener);
}
@Override
protected void onStop() {
super.onStop();
if(mAuthListener!=null){
mAuth.removeAuthStateListener(mAuthListener);
}
}
private void toastMessage(String message){
Toast.makeText(this,message,Toast.LENGTH_SHORT).show();
}
}
UserInformation.class
package com.mcarrow.mapsservicerunning;
public class UserInformation {
private double title;
private String desc;
public UserInformation(double title, String desc) {
this.title = title;
this.desc = desc;
}
public double getTitle() {
return title;
}
public void setTitle(double title) {
this.title = title;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public UserInformation(){
}
}