Извлечение данных из Firebase для заполнения RecyclerView - PullRequest
0 голосов
/ 29 августа 2018

Я хочу получить некоторые данные из FireBase, чтобы заполнить приложение RecyclerView.My: идея выбирает некоторые местоположения из фрагмента карты и затем сохраняет их в базе данных Firebase. Эти сохраненные местоположения отображаются во фрагменте Places, где Я хочу использовать RecylcerView. Когда я запускаю приложение, я получаю следующие ошибки

</p> <pre><code>08-29 23:01:35.257 25039-25039/com.aplicatiechat.mcristi.firebaseandmapsdemoforlearning E/AndroidRuntime: FATAL EXCEPTION: main Process: com.aplicatiechat.mcristi.firebaseandmapsdemoforlearning, PID: 25039 com.google.firebase.database.DatabaseException: Class com.aplicatiechat.mcristi.firebaseandmapsdemoforlearning.Places is missing a constructor with no arguments at com.google.android.gms.internal.zzekq.zze(Unknown Source) at com.google.android.gms.internal.zzekp.zzb(Unknown Source) at com.google.android.gms.internal.zzekp.zza(Unknown Source) at com.google.firebase.database.DataSnapshot.getValue(Unknown Source) at com.firebase.ui.database.ClassSnapshotParser.parseSnapshot(ClassSnapshotParser.java:22) at com.firebase.ui.database.ObservableSnapshotArray.getObject(ObservableSnapshotArray.java:141) at com.firebase.ui.database.CachingObservableSnapshotArray.getObject(CachingObservableSnapshotArray.java:40) at com.firebase.ui.database.FirebaseRecyclerAdapter.getItem(FirebaseRecyclerAdapter.java:127) at com.firebase.ui.database.FirebaseRecyclerAdapter.onBindViewHolder(FirebaseRecyclerAdapter.java:164) 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.consumePendingUpdateOperations(RecyclerView.java:1767) at android.support.v7.widget.RecyclerView$1.run(RecyclerView.java:356) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:777) at android.view.Choreographer.doCallbacks(Choreographer.java:590) at android.view.Choreographer.doFrame(Choreographer.java:559) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:763) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:145) at android.app.ActivityThread.main(ActivityThread.java:5951) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195)

Это мой фрагмент мест: </p> <pre><code> public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { mView = inflater.inflate(R.layout.places_fragment, container, false); mRecylcerView = mView.findViewById(R.id.places); mRecylcerView.setHasFixedSize(true); mRecylcerView.setLayoutManager(new LinearLayoutManager(getContext())); return mView; } @Override public void onStart() { super.onStart(); mFirebaseUser = FirebaseAuth.getInstance().getCurrentUser(); mDataBase = FirebaseDatabase.getInstance().getReference().child("users").child(mFirebaseUser.getUid()); DatabaseReference places = FirebaseDatabase.getInstance().getReference().child("users").child(mFirebaseUser.getUid()).child("place"); DatabaseReference keys = FirebaseDatabase.getInstance().getReference().child("users").child(mFirebaseUser.getUid()).child("key"); FirebaseIndexRecyclerAdapter<Places,PlacesViewHolder> firebaseRecyclerAdapter = new FirebaseIndexRecyclerAdapter<Places,PlacesViewHolder>(Places.class,R.layout.place_layout,PlacesViewHolder.class,places,keys) { @Override protected void populateViewHolder(PlacesViewHolder viewHolder, Places model, int position) { viewHolder.setLat(model.getLat()); viewHolder.setLon(model.getLon()); } }; mRecylcerView.setAdapter(firebaseRecyclerAdapter); } } class PlacesViewHolder extends RecyclerView.ViewHolder{ View mView; private TextView lat; private TextView lon; public PlacesViewHolder(View itemView) { super(itemView); mView = itemView; lat = mView.findViewById(R.id.lat_view); lon = mView.findViewById(R.id.lon_view); } public void setLat(String n){ lat.setText(n); } public void setLon(String e){ lon.setText(e); } }

и вот мой класс Model Places:

</p> <pre><code>public class Places extends RecyclerView.ViewHolder { private String lat; private String lon; public Places(View itemView) { super(itemView); } public String getLat() { return lat; } public void setLat(String lat) { this.lat = lat; } public String getLon() { return lon; } public void setLon(String lon) { this.lon = lon; } }

Вот скриншот с моей базой данных: База данных Firebase

1 Ответ

0 голосов
/ 29 августа 2018

Добавьте пустой конструктор в ваш класс Places как

public Places(){}

потому что адаптер переработчика Firebase не нашел этот пустой конструктор в вашем классе Places. И заменить это

FirebaseIndexRecyclerAdapter<Places,PlacesViewHolder> firebaseRecyclerAdapter = new FirebaseIndexRecyclerAdapter<Places,PlacesViewHolder>(Places.class,R.layout.place_layout,PlacesViewHolder.class,places,keys)

с

FirebaseIndexRecyclerAdapter<Places,PlacesViewHolder> firebaseRecyclerAdapter = new FirebaseIndexRecyclerAdapter<Places,PlacesViewHolder>(Places.class,R.layout.place_layout,PlacesViewHolder.class,keys,places) {

И вам нужно удалить расширение из класса Places.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...