0

Ich benutze Firebase und ich muss Kinder auf den RecyclerView nicht FirebaseRecyclerAdapter abrufen, damit ich die Kinder zum RecyclerView abrufen muss.Firebase-Kinder zu RecyclerView

Hier ist meine Firebase Datenbankstruktur:

"Following" : { 
    "ORBBKfZAAUhqI1h7ojQDzYOjgkp1" : { 
     "pypD1SYZkbcYesk09WuMUY1AkTf1" : { 
     "UID" : "pypD1SYZkbcYesk09WuMUY1AkTf1" 
     }, 
     "z2SNUlLd6mQM8nnlkU2VUws5Ggl2" : { 
     "UID" : "z2SNUlLd6mQM8nnlkU2VUws5Ggl2" 
     } 
    }, 
    "Posts" : { 
    "-KduqnVVczZf5uibQiZ-" : { 
     "Describe" : "gg", 
     "MostView" : -8, 
     "Time" : 14881230655, 
     "UID" : "pypD1SYZkbcYesk09WuMUY1AkTf1", 
     "Username" : "Jone", 
     "Wallpaper" : "https://firebasestorage.googleapis.com/v0/b/test-3f4c5.appspot.com/o/Posts%2Fcropped906285501.jpg?alt=media&token=0c1a3a3d-6e48-4c4e-ba59-f5646bf8965f" 
    }, 
    "-Ke5gJ00CxbjhOuhzLIx" : { 
     "Describe" : "hajj", 
     "MostView" : -9, 
     "Time" : 1488318465, 
     "UID" : "pypD1SYZkbcYesk09WuMUY1AkTf1", 
     "Username" : "Dom", 
     "Wallpaper" : "https://firebasestorage.googleapis.com/v0/b/test-3f4c5.appspot.com/o/Posts%2Fcropped1717103943.jpg?alt=media&token=a85b2488-5ac7-49a7-9ad0-dbf4e6f29389" 
    }, 
    "-KeCuiFmUCpN19zwsTsR" : { 
     "Describe" : "a", 
     "MostView" : -2, 
     "Profile" : "https://lh4.googleusercontent.com/-suB77riNoX8/AAAAAAAAAAI/AAAAAAAAAAA/ADPlhfKMzINn-Ki538Sqf6SRGaXC81-WuQ/s200-c/photo.jpg", 
     "Time" : 1488439652, 
     "UID" : "z2SNUlLd6mQM8nnlkU2VUws5Ggl2", 
     "Username" : "Dom", 
     "Wallpaper" : "https://firebasestorage.googleapis.com/v0/b/test-3f4c5.appspot.com/o/Posts%2Fcropped1913886685.jpg?alt=media&token=c8ad26b2-8f09-453b-b48a-aad9e4d8b5c3" 
    }, 
    "-KeD2fBUQ09HVMrvAneb" : { 
     "Describe" : "ee", 
     "MostView" : -2, 
     "Profile" : "https://lh4.googleusercontent.com/-suB77riNoX8/AAAAAAAAAAI/AAAAAAAAAAA/ADPlhfKMzINn-Ki538Sqf6SRGaXC81-WuQ/s200-c/photo.jpg", 
     "Time" : 1488441999, 
     "UID" : "z2SNUlLd6mQM8nnlkU2VUws5Ggl2", 
     "Username" : "Dom", 
     "Wallpaper" : "https://firebasestorage.googleapis.com/v0/b/test-3f4c5.appspot.com/o/Posts%2Fcropped1904338270.jpg?alt=media&token=d200b7fc-15e7-4dc4-9913-59c377929e9e" 
    }, 
    "-KeDfnMWiB7k_4J3FBgZ" : { 
     "Describe" : "f12g", 
     "MostView" : -1, 
     "Time" : 1488452517, 
     "UID" : "ORBBKfZAAUhqI1h7ojQDzYOjgkp1" 
     "Username" : "Young", 
     "Wallpaper" : "https://firebasestorage.googleapis.com/v0/b/test-3f4c5.appspot.com/o/Posts%2Fcropped1872832638.jpg?alt=media&token=80239844-a872-47e2-9689-92d368dd9452" 
    }, 
    "-KeDfrw4inUQFtIDXJHp" : { 
     "Describe" : "fg", 
     "MostView" : -2, 
     "Time" : 1488452536, 
     "UID" : "ORBBKfZAAUhqI1h7ojQDzYOjgkp1" 
     "Username" : "Young", 
     "Wallpaper" : "https://firebasestorage.googleapis.com/v0/b/test-3f4c5.appspot.com/o/Posts%2Fcropped1872832638.jpg?alt=media&token=80239844-a872-47e2-9689-92d368dd9452" 
    }, 

    } 
} 

I Beitrag für die folgenden Benutzer zu zeigen, brauchen nur so habe ich diese Methode:

mPostList = (RecyclerView) v.findViewById(R.id.MainPostList); 
    mPostList.setHasFixedSize(true); 
    mPostList.setItemAnimator(new DefaultItemAnimator()); 
    LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity()); 
    mPostList.setLayoutManager(layoutManager); 

    mAuth = FirebaseAuth.getInstance(); 
    mCurrentUser = mAuth.getCurrentUser(); 

    mDatabase = FirebaseDatabase.getInstance().getReference().child("Posts"); 
    mDatabaseUsers = FirebaseDatabase.getInstance().getReference().child("Users"); 
    mDatabaseFriends = FirebaseDatabase.getInstance().getReference().child("Following").child(mCurrentUser.getUid()); 

    return v; 
} 

@Override 
public void onStart() { 
    super.onStart(); 

    mAuth.addAuthStateListener(mListener); 

    mDatabaseFriends.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot2) { 

      for (DataSnapshot GettingFollowingList : dataSnapshot2.getChildren()){ 
       mDatabase.orderByChild("UID").equalTo(GettingFollowingList.getKey()).addValueEventListener(new ValueEventListener() { 
        @Override 
        public void onDataChange(DataSnapshot dataSnapshot) { 
         for (DataSnapshot Q : dataSnapshot.getChildren()){ 

          Adapter MyAdapter = Q.getValue(Adapter.class); 
          mPostList.setAdapter(MyAdapter);}} 
        @Override 
        public void onCancelled(DatabaseError databaseError) { 

        }});}} 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     }}); 

Und hier ist mein Adapter:

class Adapter extends RecyclerView.Adapter<PostViewHolder> { 
ArrayList<Getting_Posts> mdataSet; 

public Adapter(ArrayList<Getting_Posts> dataSet){ 
    mdataSet = dataSet; 
} 

@Override 
public PostViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View inflatedView = LayoutInflater.from(parent.getContext()).inflate(R.layout.post_card_design, parent, false); 
    return new PostViewHolder(inflatedView); 
} 

@Override 
public void onBindViewHolder(final PostViewHolder holder, int position) { 
    Getting_Posts model = mdataSet.get(position); 

    //model.getTime(); 
    //holder.mPostTime.setText("Q"); 
    // Set the properties of the holder 
    // I don't know what properties you used in the viewholder so I'll just give an example 
    // example: holder.Name.setText(post.getName()); 
} 

@Override 
public int getItemCount() { 
    return mdataSet.size(); 
} 

public void add(int position, Getting_Posts post) { 
    mdataSet.add(position, post); 
    notifyItemInserted(position); 
} 

Und hier ist mein erster Beitrag:

public class Getting_Posts { 

//Post 
private Long Time; 
private String Describe; 
private String Wallpaper; 
private String Username; 
private String ProfilePic; 

public Getting_Posts() {} 

public Getting_Posts 
     (Long Time, 
     String Describe, 
     String Wallpaper, 
     String Username; 
     String ProfilePic; 
     ) { 

    this.Time = Time; 
    this.Describe = Describe; 
    this.Wallpaper = Wallpaper; 
    this.Username = Username; 
    this.ProfilePic = ProfilePic; 

} 

public Long getTime() { 
    return Time; 
} 

public void setTime(Long time) { 
    Time = time; 
} 

public String getDescribe() { 
    return Describe; 
} 

public void setDescribe(String describe) { 
    Describe = describe; 
} 

public String getWallpaper() { 
    return Wallpaper; 
} 

public void setWallpaper(String wallpaper) { 
    Wallpaper = wallpaper; 
} 

public String getUsername() { 
    return Username; 
} 

public void setUsername(String username) { 
    Username = username; 
} 

public String getProfilePic() { 
    return ProfilePic; 
} 

public void setProfilePic(String profilepic) { 
    ProfilePic = profilepic; 
} 

aber Ich bin immer diese Fehlermeldung:

com.google.firebase.database.DatabaseException: Class com.pcsoftgroup.test.fragments.Adapter is missing a constructor with no arguments 
                     at com.google.android.gms.internal.zzalq$zza.zze(Unknown Source) 
                     at com.google.android.gms.internal.zzalq$zza.zzcc(Unknown Source) 
                     at com.google.android.gms.internal.zzalq.zzd(Unknown Source) 
                     at com.google.android.gms.internal.zzalq.zzb(Unknown Source) 
                     at com.google.android.gms.internal.zzalq.zza(Unknown Source) 
                     at com.google.firebase.database.DataSnapshot.getValue(Unknown Source) 
                     at com.pcsoftgroup.test.fragments.MainChallenges$3$1.onDataChange(MainChallenges.java:151) 

Antwort

1

Im Allgemeinen, wenn Sie die Feuerbasis Daten mit einer Modellklasse ordnen Sie einen leeren Konstruktor hinzuzufügen haben.

In Ihrem Fall Sie die Abbildung der Daten mit dem Adapter Klasse

Adapter MyAdapter = Q.getValue(Adapter.class);

so sollten Sie den Konstruktor in dieser Klasse hinzuzufügen.

class Adapter { 

    public Adapter() { 
      // Default constructor required for calls to DataSnapshot.getValue(Adapter.class) 
    } 

} 

In Ihrem Fall es macht keinen Sinn.
Sie sollten auf die Kinder fahren (zum Beispiel die Getting_Posts Referenz) und dann jedes Kind mit einem Getting_Posts abbilden und sie dem Adapter hinzufügen (eine Liste davon).

Etwas wie:

for (DataSnapshot Q : dataSnapshot.getChildren()){ 
       myList.add(Q.getValue(Getting_Posts.class); 
} 
myAdapter.setList(myList); 

In jedem Fall, dass Sie Firebase UI versuchen sollte.
Es ist sehr einfach, einen RecyclerView mit Firebase Daten zu füllen.

+0

Sorry @Gabriele, aber ich konnte nicht gut verstehen, können Sie mir bitte einen kompletten Anawer geben. – 7uthaifah

+0

@ 7uthaifah Sie sollten etwas in Ihrer Logik ändern. Ich habe gerade die Antwort mit einer einfachen Idee bearbeitet. Es ist ziemlich schwierig, hier die ganze Logik zu schreiben. –

+0

bedenken Sie, dass ich RecyclerView neu benutze, weil ich FirebaseRecyclerAdapter benutzt habe, aber ich habe meine Meinung geändert und benutze RecyclerView, also bitte, können Sie mir die vollständige Antwort geben und entschuldigen Sie das Nehmen aus Ihrer Zeit, bitte helfen Sie mir Bruder . – 7uthaifah

Verwandte Themen