0

Я получаю эту ошибку при попытке установить мой layoutmanager для моего recyclerview. Я создал диспетчер компоновки и установил свой recyclerview, чтобы использовать его. По какой-то причине layoumanager является нулевым.Ссылка на нулевой объект на LayoutManager

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.jcaseydev.popularmovies/com.jcaseydev.popularmovies.ui.ReviewsActivity}: 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:2625) 
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2686) 
                      at android.app.ActivityThread.-wrap12(ActivityThread.java) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1440) 
                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                      at android.os.Looper.loop(Looper.java:154) 
                      at android.app.ActivityThread.main(ActivityThread.java:5969) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:801) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:691) 
                     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.jcaseydev.popularmovies.ui.ReviewsFragment.onCreateView(ReviewsFragment.java:65) 
                      at android.support.v4.app.Fragment.performCreateView(Fragment.java:2074) 
                      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104) 
                      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1286) 
                      at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:758) 
                      at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1671) 
                      at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:388) 
                      at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:619) 
                      at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1248) 
                      at android.app.Activity.performStart(Activity.java:6686) 
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2588) 
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2686)  
                      at android.app.ActivityThread.-wrap12(ActivityThread.java)  
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1440)  
                      at android.os.Handler.dispatchMessage(Handler.java:102)  
                      at android.os.Looper.loop(Looper.java:154)  
                      at android.app.ActivityThread.main(ActivityThread.java:5969)  
                      at java.lang.reflect.Method.invoke(Native Method) 

Вот класс recylerview.

public ReviewsFragment(){} 
RecyclerView mRecyclerView; 
RecyclerView.LayoutManager linearLayoutManager; 
RecyclerView.Adapter mAdapter; 
private int movieId; 
private List<Reviews> movieReviews = new ArrayList<>(); 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.activity_review, container, false); 

    FetchMovieReviews fmr = new FetchMovieReviews(); 
    // fmr.execute(); 

    //get intent 
    Intent intent = getActivity().getIntent(); 

    //key for the intent extra 
    String MOVIE_ID = "movie_id"; 
    if(intent != null && intent.hasExtra(MOVIE_ID)){ 
     movieId = intent.getIntExtra(MOVIE_ID, 49026); 
    } 

    mRecyclerView = (RecyclerView) rootView.findViewById(R.id.reviews_recyclerview); 
    linearLayoutManager = new LinearLayoutManager(getActivity()); 
    mRecyclerView.setLayoutManager(linearLayoutManager); 

    movieReviews.add(0, new Reviews("test", "TESTING")); 
    movieReviews.add(1, new Reviews("test", "TESTING")); 
    movieReviews.add(2, new Reviews("tset", "TESTING")); 

    mAdapter = new MyAdapter(movieReviews); 
    mRecyclerView.setAdapter(mAdapter); 
    return rootView; 
} 

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 



} 

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>{ 
    private List<Reviews> mDataset; 

    public class ViewHolder extends RecyclerView.ViewHolder{ 
     public TextView mTextView; 
     public ViewHolder(View itemView) { 
      super(itemView); 
      mTextView = (TextView) itemView; 
     } 
    } 

    public MyAdapter(List<Reviews> reviews){ 
     mDataset = reviews; 
    } 

    @Override 
    public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.review_list_item, parent, false); 

     ViewHolder vh = new ViewHolder(view); 
     return vh; 
    } 

    @Override 
    public void onBindViewHolder(MyAdapter.ViewHolder holder, int position) { 
     holder.mTextView.setText(mDataset.get(position).getAuthor()); 
    } 

    @Override 
    public int getItemCount() { 
     return mDataset.size(); 
    } 
} 

Я не уверен, в чем проблема.

Вот review_fragment XML

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

<android.support.v7.widget.RecyclerView 
    android:layout_height="match_parent" 
    android:layout_width="match_parent" 
    android:id="@+id/reviews_recyclerview"/> 

</LinearLayout> 

Вот это activity_review XML

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/review_activity" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 
</FrameLayout> 
+0

Разместить свои XML-файлы, связанные с activity_review и reviews_recyclerview – Stallion

+0

Я отправил файлы XML. –

+0

'LayoutManager' не' null', ваш 'RecyclerView' есть. – nhaarman

ответ

1

LayoutManager не null, ваш RecyclerView есть. Вы накачаете R.layout.activity_review вместо R.layout.review_fragment.

Из-за этого mRecyclerView = (RecyclerView) rootView.findViewById(R.id.reviews_recyclerview); результаты mRecyclerView являются null.

Таким образом, убедитесь, что вы раздувать R.layout.review_fragment:

View rootView = inflater.inflate(R.layout.review_fragment, container, false); 
+0

А как я ненавижу, когда я отвечаю в ту же минуту, что и кто-то другой :) Плюс у меня плохая связь, так что мой ответ занял 20 сек. Пост: D – Vucko

1

В этой строке вы на самом деле надувания вид деятельности:

View rootView = inflater.inflate(R.layout.activity_review, container, false); 

Но вид ресайклера вы стремитесь найти не в этом макете, но в макете фрагмента. Изменить эту линию:

View rootView = inflater.inflate(R.layout.review_fragment, container, false); 
Смежные вопросы