0

当我尝试为我的recyclerview设置我的layoutmanager时出现此错误。我创建了一个布局管理器并设置了我的recyclerview来使用它。由于某种原因,布局管理员为空。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

发布您的有关activity_review和reviews_recyclerview的xml文件 – 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);结果为mRecyclerViewnull

因此,一定要夸大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); 
相关问题