87

Я пытаюсь запутаться в новом RecyclerView, и всякий раз, когда я пытаюсь запустить его, приложение сразу же падает. Это дает мне NullPointerException для попытки доступа к методам из android.support.v7.widget.RecyclerView. Я просмотрел другие сообщения и увидел, что у большинства людей не было compile 'com.android.support:recyclerview-v7:+', но я попробовал это, и это не помогло. Не совсем уверен, что делать в этот момент, любая помощь будет оценена. Вот журнал ошибок (я бы разместить фотографию, но у меня нет 10 респ еще)Ошибка приложения при попытке использовать RecyclerView на Android 5.0

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView$LayoutManager.onMeasure(android.support.v7.widget.RecyclerView$Recycler, android.support.v7.widget.RecyclerView$State, int, int)' on a null object reference 
     at android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:1764) 
     at android.view.View.measure(View.java:17430) 
     at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:727) 
     at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:463) 
     at android.view.View.measure(View.java:17430) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
     at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) 
     at android.view.View.measure(View.java:17430) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
     at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) 
     at android.view.View.measure(View.java:17430) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436) 
     at android.widget.LinearLayout.measureVertical(LinearLayout.java:722) 
     at android.widget.LinearLayout.onMeasure(LinearLayout.java:613) 
     at android.view.View.measure(View.java:17430) 
     at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:851) 
     at android.view.View.measure(View.java:17430) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
     at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) 
     at android.view.View.measure(View.java:17430) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436) 
     at android.widget.LinearLayout.measureVertical(LinearLayout.java:722) 
     at android.widget.LinearLayout.onMeasure(LinearLayout.java:613) 
     at android.view.View.measure(View.java:17430) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
     at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) 
     at android.view.View.measure(View.java:17430) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436) 
     at android.widget.LinearLayout.measureVertical(LinearLayout.java:722) 
     at android.widget.LinearLayout.onMeasure(LinearLayout.java:613) 
     at android.view.View.measure(View.java:17430) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
     at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) 
     at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2560) 
     at android.view.View.measure(View.java:17430) 
     at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2001) 
     at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1166) 
     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1372) 
     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1054) 
     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5786) 
     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767) 
     at android.view.Choreographer.doCallbacks(Choreographer.java:580) 
     at android.view.Choreographer.doFrame(Choreographer.java:550) 
     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753) 
     at android.os.Handler.handleCallback(Handler.java:739) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:135) 
     at android.app.ActivityThread.main(ActivityThread.java:5221) 
     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:898) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693) 
+0

разместить свой код ... – massaimara98

+0

для тех, кто имеет эту ошибку, вызванную закладками ViewPager см это [решение] (HTTP: // stackoverflow.com/a/34500413/2977976) – HMG

+0

Вы решили это? .Пожалуйста, помогите у меня такая же проблема. –

ответ

209

Эта проблема обычно возникает, когда нет LayoutManager не было предусмотрено для RecyclerView. Вы можете сделать это так:

final LinearLayoutManager layoutManager = new LinearLayoutManager(context); 
layoutManager.setOrientation(LinearLayoutManager.VERTICAL); 
recyclerView.setLayoutManager(layoutManager); 
+0

Спасибо, что исправил его. Я не установил layoutManager в final. – Joe

+13

Я не думаю, что это должно быть окончательным, поэтому я не думаю, что это была проблема. В моем случае я реализовал фрагмент с recyclerView, и я попытался просто сохранить ссылку на него из onCreateView и позже установить layoutManager при загрузке данных. У меня была эта проблема, и она ушла, когда я установил layoutManager ранее в методе gamein onCreateView. –

+2

@ NemanjaKovačević хорошо, я полагаю, что каждая переменная, которую не нужно менять позже, должна быть объявлена ​​как «final», поэтому я объявил ее «final» здесь. – aga

26

В моем случае это не было связано с «окончательным», но к этому вопросу, упомянутой в @ NemanjaKovačević комментарий к @aga ответ. Я установил layoutManager для загрузки данных, и это стало причиной такого же сбоя. После перемещения установки layoutManager в onCreateView моего фрагмента проблема была исправлена.

Что-то вроде этого:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) 
{ 
... 
mRecyclerView = (RecyclerView) rootView.findViewById(R.id.recycler); 

mLayoutManager = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL); 
mRecyclerView.setLayoutManager(mLayoutManager); 
+1

Еще раз: я не говорю, что эта проблема каким-то образом связана с тем, что переменная не является окончательной. Проблема в том, что 'LayoutManager' ** не был предоставлен **, вот и все. Вы можете сделать переменную, указывающую на «LayoutManager» final, или not final - она ​​ничего не меняет. – aga

+0

@Yurik Я использую recyclerview в Activity, а не на фрагменте. что для меня? – Youri

+0

@Youri вы должны просто поместить layoutManager в onCreate своей деятельности, я думаю. – YuriK

7

я испытал этот крах, даже если я имел RecyclerView.LayoutManager правильно установить. Мне пришлось переместить код инициализации RecyclerView в ответ на вызов onViewCreated(...), чтобы исправить эту проблему.

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.fragment_listing, container, false); 
    rootView.setTag(TAG); 
    return inflater.inflate(R.layout.fragment_listing, container, false); 
} 

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 

    mLayoutManager = new LinearLayoutManager(getActivity()); 
    mLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); 

    mRecyclerView = (RecyclerView) view.findViewById(R.id.recyclerView); 
    mRecyclerView.setItemAnimator(new DefaultItemAnimator()); 
    mRecyclerView.setLayoutManager(mLayoutManager); 

    mAdapter = new ListingAdapter(mListing); 
    mRecyclerView.setAdapter(mAdapter); 
} 
+2

Тем не менее, моя проблема не решена:/i пыталась почти каждое решение и по-прежнему получала ту же ошибку при использовании RecyclerView внутри фрагмента, который будет показан в PagerView :( –

+0

Awesome! Перемещение кода инициализации 'RecyclerView' в' onViewCreated (. ..) 'работал –

0

С LinearLayoutManager вертикальна по умолчанию, более простой способ сделать это:

recyclerView.setLayoutManager(new LinearLayoutManager(context));

Если вы хотите изменить ориентацию вы могли бы использовать этот конструктор:

public LinearLayoutManager(Context context, int orientation, boolean reverseLayout); 
+0

, у которого сейчас есть странный диспетчер issulinearlayout, im, создающий его, но в то же время эта ошибка. святая корова. –

10

Для меня у меня была такая же проблема, проблема заключалась в том, что в xml был использован неиспользуемый RecyclerView, но я не привязываю его к любому адаптеру в Activity , следовательно, проблема. Она была решена, как только я снял такие неиспользуемые представления Ресайклера в XML

т.е. - я удалил эту точку зрения, так как это не было вызвано в коде или любой адаптер установлен

<android.support.v7.widget.RecyclerView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/rv_profileview_allactivities" 
     android:visibility="gone" /> 
+0

То же самое здесь было прекрасно, но это не сработало. Поэтому я удалил неиспользуемые утилиты, и это сработало без каких-либо проблем Спасибо мужчине @Maurice ^^ – Bhupinder

+1

после того, как потратил день на то, что я попробовал ваше решение, и это сработало: D [:(мое время потеряно] –

4

Вы должны использовать setLayoutManager в метод RecyclerView#onCreate(). Перед добавлением recyclerView к представлению он должен иметь комплект LayoutManager.

private RecyclerView menuAsList; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_home); 

    menuAsList = (RecyclerView) findViewById(R.id.recyclerView_mainMenu); 
    menuAsList.setLayoutManager(new LinearLayoutManager(Home.this)); 

} 
0

У меня возникла эта проблема из-за неправильной ссылки RecyclerView id.

recyclerView = (RecyclerView) findViewById(R.id.rv_followers_list); 

в

recyclerView = (RecyclerView) findViewById(R.id.rv_search_list); 
0
recyclerView = 
      (RecyclerView) findViewById(R.id.recycler_view2); 

Проверить с вами Ресайклер вид ID, указывающий на фактический взгляд ресайклера решена моя проблема

0

Я думаю, что проблема в вашем Adapter. Убедитесь, что вы вернулись ViewHolder в onCreateViewHolder(). Как показано ниже:

@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v; 
    v = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_leaderboard, parent, false); 
    ViewHolder view_holder = new ViewHolder(v); 
    return view_holder; 
} 
0
package com.example.om.recycler_view; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.support.v7.widget.DefaultItemAnimator; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.support.v7.widget.Toolbar; 

import java.util.ArrayList; 
import java.util.List; 

public class MainActivity extends AppCompatActivity { 
    private List<Movie>movieList= new ArrayList<>(); 
    private RecyclerView recyclerView; 
    private MoviesAdapter mAdapter; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar=(Toolbar)findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     recyclerView=(RecyclerView)findViewById(R.id.recycler_view); 

     mAdapter=new MoviesAdapter(movieList); 
     RecyclerView.LayoutManager mLayoutManager= new LinearLayoutManager(this); 
     recyclerView.setLayoutManager(mLayoutManager); 
     recyclerView.setItemAnimator(new DefaultItemAnimator()); 
     recyclerView.setAdapter(mAdapter); 

     prepareMovieData(); 
    } 

    private void prepareMovieData() { 
     Movie movie=new Movie("Mad Max: Fury Road", "Action & Adventure", "2015"); 
     movieList.add(movie); 

     movie = new Movie("Star Wars: Episode VII - The Force Awakens", "Action", "2015"); 
     movieList.add(movie); 

     movie = new Movie("Shaun the Sheep", "Animation", "2015"); 
     movieList.add(movie); 

     movie = new Movie("The Martian", "Science Fiction & Fantasy", "2015"); 
     movieList.add(movie); 

     movie = new Movie("Mission: Impossible Rogue Nation", "Action", "2015"); 
     movieList.add(movie); 

     movie = new Movie("Up", "Animation", "2009"); 
     movieList.add(movie); 

     movie = new Movie("Star Trek", "Science Fiction", "2009"); 
     movieList.add(movie); 

     movie = new Movie("The LEGO Movie", "Animation", "2014"); 
     movieList.add(movie); 

     movie = new Movie("Iron Man", "Action & Adventure", "2008"); 
     movieList.add(movie); 

     movie = new Movie("Aliens", "Science Fiction", "1986"); 
     movieList.add(movie); 

     movie = new Movie("Chicken Run", "Animation", "2000"); 
     movieList.add(movie); 

     movie = new Movie("Back to the Future", "Science Fiction", "1985"); 
     movieList.add(movie); 

     movie = new Movie("Raiders of the Lost Ark", "Action & Adventure", "1981"); 
     movieList.add(movie); 

     movie = new Movie("Goldfinger", "Action & Adventure", "1965"); 
     movieList.add(movie); 

     movie = new Movie("Guardians of the Galaxy", "Science Fiction & Fantasy", "2014"); 
     movieList.add(movie); 

     mAdapter.notifyDataSetChanged(); 
    } 
} 



ERROR is: 
                       java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.om.recycler_view/com.example.om.recycler_view.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView.setLayoutManager(android.support.v7.widget.RecyclerView$LayoutManager)' on a null object reference 
                        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2348) 
                        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2410) 
                        at android.app.ActivityThread.access$800(ActivityThread.java:151) 
                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1313) 
                        at android.os.Handler.dispatchMessage(Handler.java:102) 
                        at android.os.Looper.loop(Looper.java:135) 
                        at android.app.ActivityThread.main(ActivityThread.java:5345) 
                        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:947) 
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:742) 
                       Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView.setLayoutManager(android.support.v7.widget.RecyclerView$LayoutManager)' on a null object reference 
                        at com.example.om.recycler_view.MainActivity.onCreate(MainActivity.java:28) 
                        at android.app.Activity.performCreate(Activity.java:6012) 
                        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 
                        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2292) 
                        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2410)  
                        at android.app.ActivityThread.access$800(ActivityThread.java:151)  
                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1313)  
                        at android.os.Handler.dispatchMessage(Handler.java:102)  
                        at android.os.Looper.loop(Looper.java:135)  
                        at android.app.ActivityThread.main(ActivityThread.java:5345)  
                        at java.lang.reflect.Method.invoke(Native Method)  
                        at java.lang.reflect.Method.invoke(Method.java:372) 





How can solve??????? 
+2

Вы должны объяснить, почему ваш код помогает ответить на вопрос. – Markus

0

Моя проблема была в моем XML lyout У меня есть андроида: animateLayoutChanges набор к истине, и я назвал notifyDataSetChanged() на адаптере RecyclerView в коде Java.

Итак, я только что удалил андроид: animateLayoutChanges из моего макета и это изменило мою проблему.

Смежные вопросы