Ошибка при настройке адаптера в RecyclerView и Cardview Android Studio

В моем приложении есть ошибка при настройке адаптера в моем recyclerView. Я реализовал все методы и посмотрел на свой класс Java, где находится адаптер, но я не могу понять, где мои ошибки. Я даже переписываю свои коды, но все равно получаю ту же ошибку каждый раз, когда запускаю приложение. Logcat приводит меня к моему MainActivity.java, где я устанавливаю свой адаптер. Посмотри.

MainActivity.java

public class MainActivity extends AppCompatActivity {

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);


        List<Data_Reminder> data = fill_with_data();

        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.reminder_recyclerview);
        recycler_reminder adapter = new recycler_reminder(data, getApplication());
        recyclerView.setAdapter(adapter);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
}

public List<Data_Reminder> fill_with_data() {

        List<Data_Reminder> data = new ArrayList<>();

        data.add(new Data_Reminder("Batman vs Superman", "Following the destruction of Metropolis, Batman embarks on a personal vendetta against Superman ", R.drawable.ic_action_movie));
        data.add(new Data_Reminder("X-Men: Apocalypse", "X-Men: Apocalypse is an upcoming American superhero film based on the X-Men characters that appear in Marvel Comics ", R.drawable.ic_action_movie));
        data.add(new Data_Reminder("Captain America: Civil War", "A feud between Captain America and Iron Man leaves the Avengers in turmoil.  ", R.drawable.ic_action_movie));
        data.add(new Data_Reminder("Kung Fu Panda 3", "After reuniting with his long-lost father, Po  must train a village of pandas", R.drawable.ic_action_movie));
        data.add(new Data_Reminder("Warcraft", "Fleeing their dying home to colonize another, fearsome orc warriors invade the peaceful realm of Azeroth. ", R.drawable.ic_action_movie));
        data.add(new Data_Reminder("Alice in Wonderland", "Alice in Wonderland: Through the Looking Glass ", R.drawable.ic_action_movie));

        return data;
    }
}

fragment_blank.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="layout.BlankFragment">

    <!-- TODO: Update blank fragment layout -->

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="200dp">

        <android.support.v7.widget.RecyclerView
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/reminder_recyclerview"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>

    </ScrollView>


</FrameLayout>

Data_Reminder.java

public class Data_Reminder {
    public String name;
    public String description;
    public int imageId;

    Data_Reminder(String name, String description, int imageId) {
        this.name = name;
        this.description = description;
        this.imageId = imageId;
    }

}

recycler_reminder.java

public class recycler_reminder extends RecyclerView.Adapter<view_holder> {

    List<Data_Reminder> list = Collections.emptyList();
    Context context;

    public recycler_reminder(List<Data_Reminder> list, Context context) {
        this.list = list;
        this.context = context;
    }

    @Override
    public view_holder onCreateViewHolder(ViewGroup parent, int viewType) {
        //Inflate the layout, initialize the View Holder
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_layout_reminder, parent, false);
        view_holder holder = new view_holder(v);
        return holder;

    }

    @Override
    public void onBindViewHolder(view_holder holder, int position) {

        //Use the provided View Holder on the onCreateViewHolder method to populate the current row on the RecyclerView
        holder.name.setText(list.get(position).name);
        holder.description.setText(list.get(position).description);
        holder.imageView.setImageResource(list.get(position).imageId);

        //animate(holder);

    }

    @Override
    public int getItemCount() {
        //returns the number of elements the RecyclerView will display
        return list.size();
    }

    @Override
    public void onAttachedToRecyclerView(RecyclerView recyclerView) {
        super.onAttachedToRecyclerView(recyclerView);
    }

    // Insert a new item to the RecyclerView on a predefined position
    public void insert(int position, Data_Reminder data) {
        list.add(position, data);
        notifyItemInserted(position);
    }

    // Remove a RecyclerView item containing a specified Data object
    public void remove(Data_Reminder data) {
        int position = list.indexOf(data);
        list.remove(position);
        notifyItemRemoved(position);
    }

}

Вот мой logcat

07-12 00:50:54.394 27684-27684/application.cedie.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                 Process: application.cedie.myapplication, PID: 27684
                                                                                 java.lang.RuntimeException: Unable to start activity ComponentInfo{application.cedie.myapplication/application.cedie.myapplication.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView.setAdapter(android.support.v7.widget.RecyclerView$Adapter)' on a null object reference
                                                                                     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2316)
                                                                                     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2376)
                                                                                     at android.app.ActivityThread.access$800(ActivityThread.java:147)
                                                                                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1281)
                                                                                     at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                     at android.os.Looper.loop(Looper.java:135)
                                                                                     at android.app.ActivityThread.main(ActivityThread.java:5253)
                                                                                     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:949)
                                                                                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:744)
                                                                                  Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView.setAdapter(android.support.v7.widget.RecyclerView$Adapter)' on a null object reference
                                                                                     at application.cedie.myapplication.MainActivity.onCreate(MainActivity.java:65)
                                                                                     at android.app.Activity.performCreate(Activity.java:5975)
                                                                                     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
                                                                                     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2269)
                                                                                     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2376) 
                                                                                     at android.app.ActivityThread.access$800(ActivityThread.java:147) 
                                                                                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1281) 
                                                                                     at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                                     at android.os.Looper.loop(Looper.java:135) 
                                                                                     at android.app.ActivityThread.main(ActivityThread.java:5253) 
                                                                                     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:949) 
                                                                                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:744) 

person RoyalCediee    schedule 11.07.2016    source источник
comment
опубликовать трассировку стека   -  person Raghunandan    schedule 11.07.2016
comment
Установите свой LayoutManager ПЕРЕД установкой адаптера   -  person Mark Keen    schedule 11.07.2016
comment
Все еще получаю ошибку @Mark Keen   -  person RoyalCediee    schedule 11.07.2016
comment
ваш recyclerView внутри действия или фрагмента, в приведенном выше xml я заметил, что имя xml — fragment_blank, и у вас есть инициализация кода в основном действии. Проверьте еще раз, пожалуйста   -  person SaravInfern    schedule 11.07.2016
comment
у меня есть recyclerView во фрагменте. @СаравИнферн   -  person RoyalCediee    schedule 11.07.2016
comment
тогда приведенная выше инициализация для вашего представления ресайклера неверна, она всегда будет вызывать исключение нулевого указателя. Если вы используете представление ресайклера из фрагмента, прикрепите фрагмент к своей активности и инициализируйте его следующим образом RecyclerView recyclerView = (RecyclerView) fragmentView.findViewById(R.id.reminder_recyclerview);, где fragementView — это макет фрагмента.   -  person SaravInfern    schedule 11.07.2016
comment
Что ты имеешь в виду? Я не понимаю @SaravInfern   -  person RoyalCediee    schedule 11.07.2016
comment
у вас должен быть recyclerview внутри activity_main.xml, чтобы инициализировать внутреннюю активность, если вы хотите инициализировать внутри фрагмента, вы должны раздуть фрагмент в своей активности и правильно инициализировать его, пожалуйста, посмотрите на пример: stackoverflow.com/questions/28357571/   -  person SaravInfern    schedule 11.07.2016


Ответы (1)


Я уже решил проблему, переместив эти коды в свой BlankFragment.java.

List<Data_Reminder> data = fill_with_data();

        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.reminder_recyclerview);
        recycler_reminder adapter = new recycler_reminder(data, getApplication());
        recyclerView.setAdapter(adapter);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
}

public List<Data_Reminder> fill_with_data() {

        List<Data_Reminder> data = new ArrayList<>();

        data.add(new Data_Reminder("Batman vs Superman", "Following the destruction of Metropolis, Batman embarks on a personal vendetta against Superman ", R.drawable.ic_action_movie));
        data.add(new Data_Reminder("X-Men: Apocalypse", "X-Men: Apocalypse is an upcoming American superhero film based on the X-Men characters that appear in Marvel Comics ", R.drawable.ic_action_movie));
        data.add(new Data_Reminder("Captain America: Civil War", "A feud between Captain America and Iron Man leaves the Avengers in turmoil.  ", R.drawable.ic_action_movie));
        data.add(new Data_Reminder("Kung Fu Panda 3", "After reuniting with his long-lost father, Po  must train a village of pandas", R.drawable.ic_action_movie));
        data.add(new Data_Reminder("Warcraft", "Fleeing their dying home to colonize another, fearsome orc warriors invade the peaceful realm of Azeroth. ", R.drawable.ic_action_movie));
        data.add(new Data_Reminder("Alice in Wonderland", "Alice in Wonderland: Through the Looking Glass ", R.drawable.ic_action_movie));

        return data;
    }

это в методе onCreateView() в моем новом BlankFrament.java

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment

    View rootView = inflater.inflate(R.layout.fragment_blank, container, false);
    // 1. get a reference to recyclerView
    RecyclerView recyclerView = (RecyclerView) rootView.findViewById(R.id.reminder_recyclerview);

    // 2. set layoutManger
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

    // 3. create an adapter
    List<Data_Reminder> data = fill_with_data();
    recycler_reminder adapter = new recycler_reminder(data, getActivity());
    recyclerView.setAdapter(adapter);

    return rootView;
}

public List<Data_Reminder> fill_with_data() {

    List<Data_Reminder> data = new ArrayList<>();

    data.add(new Data_Reminder("Batman vs Superman", "Following the destruction of Metropolis, Batman embarks on a personal vendetta against Superman ", R.drawable.ic_action_movie));
    data.add(new Data_Reminder("X-Men: Apocalypse", "X-Men: Apocalypse is an upcoming American superhero film based on the X-Men characters that appear in Marvel Comics ", R.drawable.ic_action_movie));
    data.add(new Data_Reminder("Captain America: Civil War", "A feud between Captain America and Iron Man leaves the Avengers in turmoil.  ", R.drawable.ic_action_movie));
    data.add(new Data_Reminder("Kung Fu Panda 3", "After reuniting with his long-lost father, Po  must train a village of pandas", R.drawable.ic_action_movie));
    data.add(new Data_Reminder("Warcraft", "Fleeing their dying home to colonize another, fearsome orc warriors invade the peaceful realm of Azeroth. ", R.drawable.ic_action_movie));
    data.add(new Data_Reminder("Alice in Wonderland", "Alice in Wonderland: Through the Looking Glass ", R.drawable.ic_action_movie));

    return data;
}
person RoyalCediee    schedule 11.07.2016