【问题标题】:Any solution to 'android.support.v7.widget.RecyclerView$LayoutManager' on a null object reference针对空对象引用的“android.support.v7.widget.RecyclerView$LayoutManager”的任何解决方案
【发布时间】:2017-05-21 16:28:50
【问题描述】:

过去 10 天我一直在尝试解决这个问题,但我无法做到。我已经为我的应用程序使用了 parse sdk,我可以从解析服务器中检索到,但它不会因为这个错误而崩溃。

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.sabhaysardana.coolDude.ExamWise.onCreateView(ExamWise.java:75)at android.support.v4.app.Fragment.performCreateView(Fragment.java:2087) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1113) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1295) at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:801) at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1643) at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:679) at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:143) at android.support.v4.view.ViewPager.populate(ViewPager.java:1272) at android.support.v4.view.ViewPager.populate(ViewPager.java:1120) at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1646)

所以考虑到应用程序能够从解析服务器打印我的值,但它没有显示在表(行)中,即 recyclerView

(我的 ExamWise 片段)

public class ExamWise extends Fragment implements RecyclerViewAdapter.ClickListener {

private RecyclerView recyclerView;
private RecyclerViewAdapter adapter;
private LinearLayoutManager layoutManager;
ArrayList<ItemsModel> data = new ArrayList<>();
ProgressDialog dialog;

public ExamWise() {

}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
}

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

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.exam_row,container,false);
    rootView = (RecyclerView)rootView.findViewById(R.id.my_recycler_view);

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

    recyclerView.setLayoutManager(layoutManager);

   rootView.findViewById(R.id.my_recycler_view);

    recyclerView.setOnScrollListener(new EndlessRecyclerView(layoutManager) {
        @Override
        public void onLoadMire(int current_page) {
            int limit = current_page * 10;
                LoadItems(limit);
        }
    });

    return rootView;
}

@Override
public void onResume() {
    super.onResume();
    recyclerView.setOnScrollListener(new EndlessRecyclerView(layoutManager) {
        @Override
        public void onLoadMire(int current_page) {
            int limit = current_page * 10;
            LoadItems(limit);
        }
    });
    loadData();
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
}

@Override
public void OnItemClick(View view, int position) {
    Intent i = new Intent(getActivity(), ActivityItemView.class);
    ItemsModel model = data.get(position);
    i.putExtra("examName",model.getTitle());
    i.putExtra("examImage",model.getImageFile());
    startActivity(i);
}

private void LoadItems(int limit) {
    ParseQuery<ParseObject> query = ParseQuery.getQuery("examWise");
    query.setLimit(limit);
    dialog = new ProgressDialog(getActivity());
    dialog.setTitle("Loading");
    dialog.setMessage("Please Wait....");
    dialog.show();

    query.findInBackground(new FindCallback<ParseObject>() {
        @Override
        public void done(List<ParseObject> objects, ParseException e) {
            dialog.dismiss();
            if (e == null) {
                for (int a = 0; a < objects.size(); a++) {
                    ParseObject object = objects.get(a);
                    ItemsModel model = new ItemsModel();
                                      model.setImageFile(object.getParseFile("examImage").toString());

                        model.setTitle(object.getString("examName").toString());
                    data.add(model);
                }
                adapter.UpdateData(data);

            } else if (e.getCode() == ParseException.CONNECTION_FAILED) {
                Toast.makeText(getActivity(),"Error "+ e.getMessage(),Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(getActivity(),"No internet connection!" , Toast.LENGTH_LONG).show();
            }

        }
    });
}

public void loadData() {
    ParseQuery<ParseObject> query = ParseQuery.getQuery("examWise");
    query.addAscendingOrder("date");
    dialog = new ProgressDialog(getActivity());
    dialog.setTitle("Loading");
    dialog.setMessage("Please Wait....");
    dialog.show();

    query.findInBackground(new FindCallback<ParseObject>() {
        @Override
        public void done(List<ParseObject> objects, ParseException e) {
            dialog.dismiss();
            if (e == null) {
                for (int a = 0; a < objects.size(); a++) {
                    ParseObject object = objects.get(a);
                    ItemsModel model = new ItemsModel();
                                            model.setImageFile(object.getParseFile("examImage").toString());                       model.setTitle(object.getString("examName").toString());
                    data.add(model);
                }

                adapter = new RecyclerViewAdapter(data, getActivity());
                adapter.setClickListerner(ExamWise.this);
                recyclerView.setAdapter(adapter);
            } else if (e.getCode() == ParseException.CONNECTION_FAILED) {
                Toast.makeText(getActivity(),"No internet connection!" , Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(getActivity(),"Error "+ e.getMessage(),Toast.LENGTH_LONG).show();

            }

        }
    });
}
}

(我的 RecyclerViewAdapter)

    public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder>  {

ClickListener clickListener;
ArrayList<ItemsModel> itemsArray = null;
Context context;

RecyclerViewAdapter(ArrayList<ItemsModel> itemsArray, Context context)      {
    this.itemsArray = itemsArray;
    this.context = context;
}

public void UpdateData(ArrayList<ItemsModel> itemsArray){
    this.itemsArray = itemsArray;
    notifyDataSetChanged();
}

@Override
public RecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {

       View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.exam_row,viewGroup,false);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(RecyclerViewAdapter.ViewHolder viewHolder, int i) {

    viewHolder.Title.setText(itemsArray.get(i).getTitle()); 
Picasso.with(context).load(itemsArray.get(i).getImageFile()).into(viewHolder.imageView);
}

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

public void setClickListerner(ClickListener clickListerner) {
    this.clickListener = clickListerner;
}


     public  class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{

    public TextView Title;
    public ImageView imageView;
    public View view;

    public ViewHolder(View itemView) {
        super(itemView);
        itemView.setOnClickListener(this);
        this.view = itemView;
        Title = (TextView) view.findViewById(R.id.homeTitle);
        imageView = (ImageView) view.findViewById(R.id.homeImage);
    }

    @Override
    public void onClick(View view) {
        if(clickListener != null){
            clickListener.OnItemClick(view, getPosition());
        }
    }
}

public interface  ClickListener{
    public  void  OnItemClick(View view, int position);
}
}

(我的项目模型)

public class ItemsModel implements Parcelable {

private String title,imageFile;

public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}


public String getImageFile() {
    return imageFile;
}

public void setImageFile(String imageFile) {
    this.imageFile = imageFile;
}

public ItemsModel() {

}

protected ItemsModel(Parcel in) {

 String[] array = new String[2];
    in.readStringArray(array);
    title = array[0];
    imageFile = array[1];
}

public static final Creator<ItemsModel> CREATOR = new     Creator<ItemsModel>() {
    @Override
    public ItemsModel createFromParcel(Parcel in) {
        return new ItemsModel(in);
    }

    @Override
    public ItemsModel[] newArray(int size) {
        return new ItemsModel[size];
    }
};

@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel parcel, int i) {
    parcel.writeStringArray(new String[] {this.title,this.imageFile});
}
}

(我的考试行.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"

android:background="@drawable/list_bg"
>

<com.parse.ParseImageView
    android:id="@+id/homeImage"
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:layout_margin="2dp"
    android:src="@drawable/ic_launcher"
    />

<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@id/homeImage"
    >
    <TextView
        android:layout_width="match_parent"
        android:layout_height="30dp"
        android:id="@+id/homeTitle"
        android:gravity="start"
        android:textAlignment="gravity"
        android:paddingRight="5dp"
        android:paddingLeft="3dp"
        android:paddingBottom="5dp"
        android:textSize="21sp"
        android:text="abcdefghijklmnopqrstuvwxyz"
        android:textColor="@color/colorBlack"
        android:maxLines="2"
        />

</RelativeLayout>

(我的回收站)

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

<android.support.v7.widget.RecyclerView
    android:id="@+id/my_recycler_view"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:clickable="true"
    android:background="@color/colorGrey" />

对不起社区我必须附上这么多的代码,但我的道德每分钟都在下降。这是我的第一个 android 项目,希望能得到你们的结果。

【问题讨论】:

  • 您的错误是: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。该行似乎是:recyclerView.setLayoutManager(layoutManager); 崩溃的原因是因为您没有为recyclerView 分配值。
  • 我认为您的意思是将这条线 rootView = (RecyclerView)rootView.findViewById(R.id.my_recycler_view); 分配给 recyclerView 而不是 rootView
  • 我不是 Android 开发人员,但似乎 recyclerView 没有为其分配存储空间。它仍然初始化为null。你需要定义它。你刚刚声明了它。
  • 我检查了recyclerView = (RecyclerView) rootView.findViewById(R.id.my_recycler_view); layoutManager = new LinearLayoutManager(getActivity()); recyclerView.setLayoutManager(layoutManager);

标签: android xml android-layout android-fragments parse-platform


【解决方案1】:

您将RecyclerView 膨胀到另一个变量中 改变这个

rootView = (RecyclerView)rootView.findViewById(R.id.my_recycler_view);

到这里

recyclerView = (RecyclerView)rootView.findViewById(R.id.my_recycler_view);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多