Search code examples
androidfirebaseandroid-recyclerviewfirebase-realtime-databasefirebaseui

firebase recyclerview gives an untraceble error


i am trying to make a recyclerview using firebase database and thats how i create it

public RecyclerView main;
FirebaseRecyclerAdapter<subject, subjectHolder> mainadapter;
main = (RecyclerView) findViewById(R.id.recyclerview_subject_list);
main.setHasFixedSize(true);
main.setLayoutManager(new LinearLayoutManager(this));
mainadapter = new FirebaseRecyclerAdapter<subject, subjectHolder>(subject.class,R.layout.recyclerview_subject_item,subjectHolder.class, FirebaseDatabase.getInstance().getReference().child("subjets").child(FirebaseAuth.getInstance().getCurrentUser().getUid()).child("physics")) {
        @Override
        protected void populateViewHolder(subjectHolder viewHolder, subject model, int position) {
            viewHolder.subject.setText(model.getSubject());
            viewHolder.teacher.setText(model.getTeacher());
        }
    };
main.setAdapter(mainadapter);

but an error is recieved as follows

java.lang.RuntimeException: java.lang.NoSuchMethodException: <init> [class android.view.View]
                                                                 at com.firebase.ui.database.FirebaseRecyclerAdapter.onCreateViewHolder(FirebaseRecyclerAdapter.java:165)
                                                                 at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:5779)
                                                                 at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5003)
                                                                 at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4913)
                                                                 at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2029)
                                                                 at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1414)
                                                                 at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1377)
                                                                 at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:578)
                                                                 at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3260)
                                                                 at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3069)
                                                                 at android.support.v7.widget.RecyclerView.consumePendingUpdateOperations(RecyclerView.java:1505)
                                                                 at android.support.v7.widget.RecyclerView.access$400(RecyclerView.java:151)
                                                                 at android.support.v7.widget.RecyclerView$1.run(RecyclerView.java:305)
                                                                 at android.view.Choreographer$CallbackRecord.run(Choreographer.java:814)
                                                                 at android.view.Choreographer.doCallbacks(Choreographer.java:614)
                                                                 at android.view.Choreographer.doFrame(Choreographer.java:583)
                                                                 at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:800)
                                                                 at android.os.Handler.handleCallback(Handler.java:733)
                                                                 at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                 at android.os.Looper.loop(Looper.java:146)
                                                                 at android.app.ActivityThread.main(ActivityThread.java:5487)
                                                                 at java.lang.reflect.Method.invokeNative(Native Method)
                                                                 at java.lang.reflect.Method.invoke(Method.java:515)
                                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
                                                                 at dalvik.system.NativeStart.main(Native Method)
                                                              Caused by: java.lang.NoSuchMethodException: <init> [class android.view.View]
                                                                 at java.lang.Class.getConstructorOrMethod(Class.java:472)
                                                                 at java.lang.Class.getConstructor(Class.java:446)
                                                                 at com.firebase.ui.database.FirebaseRecyclerAdapter.onCreateViewHolder(FirebaseRecyclerAdapter.java:162)
                                                                 at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:5779) 
                                                                 at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5003) 
                                                                 at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4913) 
                                                                 at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2029) 
                                                                 at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1414) 
                                                                 at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1377) 
                                                                 at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:578) 
                                                                 at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3260) 
                                                                 at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3069) 
                                                                 at android.support.v7.widget.RecyclerView.consumePendingUpdateOperations(RecyclerView.java:1505) 
                                                                 at android.support.v7.widget.RecyclerView.access$400(RecyclerView.java:151) 
                                                                 at android.support.v7.widget.RecyclerView$1.run(RecyclerView.java:305) 
                                                                 at android.view.Choreographer$CallbackRecord.run(Choreographer.java:814) 
                                                                 at android.view.Choreographer.doCallbacks(Choreographer.java:614) 
                                                                 at android.view.Choreographer.doFrame(Choreographer.java:583) 
                                                                 at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:800) 
                                                                 at android.os.Handler.handleCallback(Handler.java:733) 
                                                                 at android.os.Handler.dispatchMessage(Handler.java:95) 
                                                                 at android.os.Looper.loop(Looper.java:146) 
                                                                 at android.app.ActivityThread.main(ActivityThread.java:5487) 
                                                                 at java.lang.reflect.Method.invokeNative(Native Method) 
                                                                 at java.lang.reflect.Method.invoke(Method.java:515) 
                                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283) 
                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099) 
                                                                 at dalvik.system.NativeStart.main(Native Method) 

here is my database

**considering 98794656 is user UID

enter image description here

*homework branch is supposed to be recycler view too

and here goes both my inner classes subject and subjectHolder

public class subject{
    public String subject, teacher;

    public subject(String subject, String teacher) {
        this.subject = subject;
        this.teacher= teacher;
    }

    public subject() {
        this.subject = "subject";
        this.teacher= "teacher";
    }
}

public class subjectHolder extends RecyclerView.ViewHolder {
    public TextView subject , teacher;
    public View view;


    public subjectHolder (View itemView) {
        super(itemView);
        view = itemView;
        subject = (TextView) itemView.findViewById(R.id.textview_subject_item_subject);
        teacher= (TextView) itemView.findViewById(R.id.textview_subject_item_teacher);
    }
}

i tried to rebuild,clean the project, i always do it like that

is the problem caused because subject has an inner child (homework)?

also in subject_item layout there is recyclerview for homework but i didnt do anything to it yet.

*i already used it more than once correctly before but in simple data not recyclerview inside another one

any idea how to fix ?! thanks


Solution

  • ViewHolder classes need to be public. And if they are nested they have to be static as well

    public class subjectHolder extends RecyclerView.ViewHolder {
    

    need to be:

    public static class subjectHolder extends RecyclerView.ViewHolder {