Java 在RecyclerView布局管理器上获取空指针异常

Java 在RecyclerView布局管理器上获取空指针异常,java,android,android-fragments,nullpointerexception,realm,Java,Android,Android Fragments,Nullpointerexception,Realm,嗨,伙计们,我有以下错误,我似乎无法解决 我有 java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.support.v7.widget.RecyclerView.setLayoutManager(android.support.v7.widget.RecyclerView$LayoutManager)” 我的代码与常规示例略有不同,因为我是在片段中而不是在活动中执行此操作的 这是我的代码。 我有一个完整片段的xml: <F

嗨,伙计们,我有以下错误,我似乎无法解决

我有

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.support.v7.widget.RecyclerView.setLayoutManager(android.support.v7.widget.RecyclerView$LayoutManager)”

我的代码与常规示例略有不同,因为我是在片段中而不是在活动中执行此操作的

这是我的代码。
我有一个完整片段的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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="mtr.MainActivityFragmentTwo">

        <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/grades"
        android:textStyle="bold"
        android:textSize="40dp"
        android:gravity="center_horizontal"
        android:layout_gravity="center"
        />

</FrameLayout>
我创建的适配器是

public class gradeRealmAdapter extends RealmRecyclerViewAdapter<Grade, gradeRealmAdapter.GradeViewHolder> {

    private final MainActivityFragmentTwo activity;

    public gradeRealmAdapter (MainActivityFragmentTwo activity, RealmResults<Grade> realmResults) {
        super(activity.getActivity(), realmResults, true);
        this.activity = activity;
    }

    @Override
    public GradeViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return new GradeViewHolder(inflater.inflate(R.layout.gradeitem, parent, false));
    }

    @Override
    public void onBindViewHolder(GradeViewHolder holder, int position) {
        Grade grade = getData().get(position);
        holder.title.setText(grade.toString());
    }

    class GradeViewHolder extends RecyclerView.ViewHolder implements View.OnLongClickListener {

        public TextView title;
        public Grade grade;

        public GradeViewHolder(View view) {
            super(view);
            title = (TextView) view.findViewById(R.id.grade_text_view);
            view.setOnLongClickListener(this);
        }

        public boolean onLongClick(View v) {
            activity.deleteItem(grade);
            return true;
        }

    }

}
我似乎无法解决这个问题。
有人知道我做错了什么吗?

让我们试着改变一下

recyclerView.setLayoutManager(新的LinearLayoutManager(this.getContext())

recyclerView.setLayoutManager(新的LinearLayoutManager(getActivity(),LinearLayoutManager.VERTICAL,false))

并对onCreateView进行一些更新:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                 Bundle savedInstanceState) {
    View rootView =inflater.inflate(R.layout.fragment_main_activity_fragment_two,container, false);
    recyclerView = (RecyclerView) rootView.findViewById(R.id.realm_recycler_view);
    setupRecyclerView();
    return rootView;
}
我有一个content_片段,它保存着recyclerview

然后,您需要在
查找视图ID
,而不是活动的布局

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

    // Don't use getActivity().findViewById
    recyclerView = (RecyclerView) rootView.findViewById(R.id.realm_recycler_view);

    setupRecyclerView();
    return rootView;
}
然后,您还有
领域
向后初始化

realm.init(getActivity()); // This throws an exception as well
realm = Realm.getDefaultInstance(); // It is initialized afterwards
因此,在
onAttach
中也要解决这个问题,在这里您可以保证有一些
上下文

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    realm = Realm.getDefaultInstance(); 
    realm.init(context); 
}

onViewCreated()


不在
onCreate

中您确定recyclerView不为空吗?或者甚至存在于XML布局中?为什么不在
onCreateView
中初始化您的
RecyclerView
?您确定您的
onCreate()
甚至正在被调用/调用/运行吗?请尝试用getActivity()替换此.getContext()。。。。为什么要尝试从活动中获取视图?我已将其更改为这种方式,但仍会收到相同的错误然后
fragment\u main\u activity\u fragment\u two.xml
不包含
@+id/realm\u recycler\u view
。这就是您获取NullPointer的基本原因,但content\u main\u fragment\u two确实包含该ID,或者它们都应该包含该ID?您只能在片段中膨胀一个布局,因此我不确定这两者的含义。
content\u main\u fragment\u two.xml
未被片段加载,
fragment\u main\u activity\u fragment\u two
。如果在
fragment\u main\u activity\u fragment\u two.xml
中没有要查找的RecyclerView元素,则会导致空指针。这是
findViewById
@Reshad在更改后的文档化功能move
recyclerView=(recyclerView)getActivity().findViewById(R.id.realm\u recycler\u视图);setupRecyclerView()
to OnCreateView如果看到我的答案,您的更新仍然会导致错误,显然我假设您也从onCreate中删除了setUpRecyclerView(),对吗?是的,我已经在那里删除了它。我将内容xml的recyclerview部分移动到片段xml中,现在我似乎得到了记录,但它看起来有点奇怪(屏幕大小的行):下面是Snot,NullPointerException是否仍然存在?这与我的回答有什么不同?
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView =  inflater.inflate(R.layout.fragment_main_activity_fragment_two, container, false);

    // Don't use getActivity().findViewById
    recyclerView = (RecyclerView) rootView.findViewById(R.id.realm_recycler_view);

    setupRecyclerView();
    return rootView;
}
realm.init(getActivity()); // This throws an exception as well
realm = Realm.getDefaultInstance(); // It is initialized afterwards
@Override
public void onAttach(Context context) {
    super.onAttach(context);
    realm = Realm.getDefaultInstance(); 
    realm.init(context); 
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                     Bundle savedInstanceState) {
    View rootView =inflater.inflate(R.layout.fragment_main_activity_fragment_two,container, false);
    recyclerView = (RecyclerView) rootView.findViewById(R.id.realm_recycler_view);

setupRecyclerView();
return rootView;
}