Reputation: 41
Building Users Activity , trying to retrieve specific info from database(name,sold items and date) getting this from All users class and my Database reference and show it in a Recyclerview on my app.
My Database
Tried FirebaseUI-Android for that https://github.com/firebase/FirebaseUI-Android/
MY APP CRASH !
My code:
@Override
protected void onStart() {
super.onStart();
startListening();
}
public void startListening(){
Query query = FirebaseDatabase.getInstance()
.getReference()
.child("Users")
.limitToLast(50);
FirebaseRecyclerOptions<ALL_USERS> options =
new FirebaseRecyclerOptions.Builder<ALL_USERS>()
.setQuery(query, ALL_USERS.class)
.build();
FirebaseRecyclerAdapter adapter = new FirebaseRecyclerAdapter<ALL_USERS, UsersViewHolder>(options) {
@Override
public UsersViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.users_card_layout, parent, false);
return new UsersViewHolder(view);
}
@Override
protected void onBindViewHolder(@NonNull UsersViewHolder usersViewHolder, int i, @NonNull ALL_USERS all_users) {
usersViewHolder.setName(all_users.getName());
}
};
mUsersList.setAdapter(adapter);
adapter.startListening();
}
public static class UsersViewHolder extends RecyclerView.ViewHolder{
View mView;
public UsersViewHolder(View itemView) {
super(itemView);
mView=itemView;
}
public void setName(String name){
TextView userNameView = mView.findViewById(R.id.Users_Name);
userNameView.setText(name);
}
}
}
ALL Users class :
public class ALL_USERS {
public String name;
public String SonyTV;
public String Date;
public ALL_USERS() {
}
public ALL_USERS(String name, String sonyTV, String date) {
this.name = name;
SonyTV = sonyTV;
Date = date;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSonyTV() {
return SonyTV;
}
public void setSonyTV(String sonyTV) {
SonyTV = sonyTV;
}
public String getDate() {
return Date;
}
public void setDate(String date) {
Date = date;
}
}
My Logcat:
E/AndroidRuntime: FATAL EXCEPTION: main
com.google.firebase.database.DatabaseException: Found two getters or fields with conflicting case sensitivity for property: date
at com.google.firebase.database.obfuscated.zzbw$zza.zza(com.google.firebase:firebase-database@@16.0.3:545)
at com.google.firebase.database.obfuscated.zzbw$zza.<init>(com.google.firebase:firebase-database@@16.0.3:476)
at com.google.firebase.database.obfuscated.zzbw.zza(com.google.firebase:firebase-database@@16.0.3:317)
at com.google.firebase.database.obfuscated.zzbw.zzb(com.google.firebase:firebase-database@@16.0.3:2418)
at com.google.firebase.database.obfuscated.zzbw.zza(com.google.firebase:firebase-database@@16.0.3:79)
at com.google.firebase.database.DataSnapshot.getValue(com.google.firebase:firebase-database@@16.0.3:212)
at com.firebase.ui.database.ClassSnapshotParser.parseSnapshot(ClassSnapshotParser.java:29)
at com.firebase.ui.database.ClassSnapshotParser.parseSnapshot(ClassSnapshotParser.java:15)
at com.firebase.ui.common.BaseCachingSnapshotParser.parseSnapshot(BaseCachingSnapshotParser.java:35)
at com.firebase.ui.common.BaseObservableSnapshotArray.get(BaseObservableSnapshotArray.java:52)
at com.firebase.ui.database.FirebaseRecyclerAdapter.getItem(FirebaseRecyclerAdapter.java:106)
at com.firebase.ui.database.FirebaseRecyclerAdapter.onBindViewHolder(FirebaseRecyclerAdapter.java:122)
at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6673)
at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6714)
at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5647)
at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5913)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5752)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5748)
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2232)
at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1559)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1519)
at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:614)
at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3812)
at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3529)
at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:4082)
at android.view.View.layout(View.java:16962)
at android.view.ViewGroup.layout(ViewGroup.java:5620)
at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1189)
at android.view.View.layout(View.java:16962)
at android.view.ViewGroup.layout(ViewGroup.java:5620)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:396)
at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
at android.view.View.layout(View.java:16962)
at android.view.ViewGroup.layout(ViewGroup.java:5620)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:2001)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1844)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1753)
at android.view.View.layout(View.java:16962)
at android.view.ViewGroup.layout(ViewGroup.java:5620)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:396)
at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
at android.view.View.layout(View.java:16962)
at android.view.ViewGroup.layout(ViewGroup.java:5620)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:2001)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1844)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1753)
at android.view.View.layout(View.java:16962)
at android.view.ViewGroup.layout(ViewGroup.java:5620)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:396)
at an
my second Logcat
com.google.firebase.database.DatabaseException: Failed to convert value of type java.lang.Long to String
at com.google.firebase.database.obfuscated.zzbw.zzb(com.google.firebase:firebase-database@@16.0.3:2413)
at com.google.firebase.database.obfuscated.zzbw.zzb(com.google.firebase:firebase-database@@16.0.3:178)
at com.google.firebase.database.obfuscated.zzbw.zza(com.google.firebase:firebase-database@@16.0.3:47)
at com.google.firebase.database.obfuscated.zzbw$zza.zza(com.google.firebase:firebase-database@@16.0.3:591)
at com.google.firebase.database.obfuscated.zzbw.zzb(com.google.firebase:firebase-database@@16.0.3:2550)
at com.google.firebase.database.obfuscated.zzbw.zza(com.google.firebase:firebase-database@@16.0.3:79)
at com.google.firebase.database.DataSnapshot.getValue(com.google.firebase:firebase-database@@16.0.3:212)
at com.firebase.ui.database.ClassSnapshotParser.parseSnapshot(ClassSnapshotParser.java:29)
at com.firebase.ui.database.ClassSnapshotParser.parseSnapshot(ClassSnapshotParser.java:15)
at com.firebase.ui.common.BaseCachingSnapshotParser.parseSnapshot(BaseCachingSnapshotParser.java:35)
at com.firebase.ui.common.BaseObservableSnapshotArray.get(BaseObservableSnapshotArray.java:52)
at com.firebase.ui.database.FirebaseRecyclerAdapter.getItem(FirebaseRecyclerAdapter.java:106)
at com.firebase.ui.database.FirebaseRecyclerAdapter.onBindViewHolder(FirebaseRecyclerAdapter.java:122)
at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6673)
at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6714)
at
android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5647)
at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5913)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5752)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5748)
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2232)
at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1559)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1519)
at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:614)
at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3812)
at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3529)
at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:4082)
at android.view.View.layout(View.java:16962)
at android.view.ViewGroup.layout(ViewGroup.java:5620)
at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1189)
at android.view.View.layout(View.java:16962)
at android.view.ViewGroup.layout(ViewGroup.java:5620)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:396)
at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
at android.view.View.layout(View.java:16962)
at android.view.ViewGroup.layout(ViewGroup.java:5620)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:2001)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1844)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1753)
at android.view.View.layout(View.java:16962)
at android.view.ViewGroup.layout(ViewGroup.java:5620)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:396)
at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
at android.view.View.layout(View.java:16962)
at android.view.ViewGroup.layout(ViewGroup.java:5620)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:2001)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1844)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1753)
at android.view.View.layout(View.java:16962)
at android.view.ViewGroup.layout(ViewGroup.java:5620)
Upvotes: 0
Views: 204
Reputation: 138814
The problem in your code lies in the fact that you have in your ALL_USERS
class a field named Date
but you are using a getter named getDate()
, which is not correct since Firebase is looking in the database for a field named date
and not Date
. See the lowercase d
letter vs. capital letter D
?
There are two ways in which you can solve this problem. The first one would be to change your model class by renaming the fields according to the Java Naming Conventions. So you model class should look like this:
public class ALL_USERS {
private String name, sonyTV;
private long date;
public ALL_USERS() {}
public ALL_USERS(String name, String sonyTV, long date) {
this.name = name;
this.sonyTV = sonyTV;
this.date = date;
}
public String getName() { return name; }
public String getSonyTV() { return sonyTV; }
public long getDate() { return date; }
}
See in this example, there are private
fields and public getters. There is also a simpler solution, to set the value directly on public fields like this:
public class ALL_USERS {
public String name, sonyTV;
public long date;
}
Now just remove the current data and add it again using the correct names. This solution will work only if you are in testing phase.
There is also the second approach, which is to use annotations
. So if you prefer to use private fields and public getters, you should use the PropertyName annotation only in front of the getter. So your ALL_USERS
class should look like this:
public class ALL_USERS {
private String name, SonyTV;
private long Date;
public ALL_USERS() {}
public ALL_USERS(String name, String sonyTV, long date) {
this.name = name;
SonyTV = sonyTV;
Date = date;
}
public String getName() { return mame; }
@PropertyName("SonyTV")
public String getSonyTV() { return SonyTV; }
@PropertyName("Date")
public long getDate() { return Date; }
}
Upvotes: 1