尝试从空对象引用中读取字段'android.view.View androidx.recyclerview.widget.RecyclerView $ ViewHolder.itemView'

问题描述 投票:0回答:1

我正在制作一个从sql获取数据并将其放入回收视图的应用程序,我首先在列表视图中尝试了它,但我发现在回收视图中更容易,无论如何,当我添加我的应用程序时,它基本上就像一个聊天系统应用程序数据进入回收视图,它在logcat中给了我这个错误。

 java.lang.NullPointerException: Attempt to read from field
       'android.view.View
       androidx.recyclerview.widget.RecyclerView$ViewHolder.itemView' on a
       null object reference
               at androidx.recyclerview.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:7079)
               at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6235)
               at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6118)
               at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6114)
               at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2303)
               at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1627)
               at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1587)
               at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:665)
               at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4134)
               at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:3851)
               at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4404)
               at android.view.View.layout(View.java:18010)
               at android.view.ViewGroup.layout(ViewGroup.java:5817)
               at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1080)
               at android.view.View.layout(View.java:18010)
               at android.view.ViewGroup.layout(ViewGroup.java:5817)
               at android.widget.FrameLayout.layoutChildren(FrameLayout.java:344)
               at android.widget.FrameLayout.onLayout(FrameLayout.java:281)
               at android.view.View.layout(View.java:18010)
               at android.view.ViewGroup.layout(ViewGroup.java:5817)
               at androidx.appcompat.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:444)
               at android.view.View.layout(View.java:18010)
               at android.view.ViewGroup.layout(ViewGroup.java:5817)
               at android.widget.FrameLayout.layoutChildren(FrameLayout.java:344)
               at android.widget.FrameLayout.onLayout(FrameLayout.java:281)
               at android.view.View.layout(View.java:18010)
               at android.view.ViewGroup.layout(ViewGroup.java:5817)
               at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1742)
               at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
               at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)

请提供帮助,因为它不会给我任何有关错误来自何处或类似问题的线索。

这是我的适配器类:

public class MyAppAdapter extends RecyclerView.Adapter<MyAppAdapter.ViewHolder>//has a class viewholder which holds
    {
        private ArrayList<ClassListChat> mOriginalValues; // Original Values
        private ArrayList<ClassListChat> mDisplayedValues;

        public class ViewHolder extends RecyclerView.ViewHolder {

            TextView messageText;
            TextView messageUser;
            TextView messageTime;

            public ViewHolder(@NonNull View itemView) {
                super(itemView);
            }
        }

        public List <ClassListChat> parkingList;

        public Context context;
        ArrayList<ClassListChat> arraylist;


        private MyAppAdapter(List<ClassListChat> apps, Context context) {
            this.parkingList = apps;
            this.context = context;
            arraylist = new ArrayList<ClassListChat>();
            arraylist.addAll(parkingList);
        }



        @Override
        public MyAppAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,int viewType) {
            View rowView = LayoutInflater.from(parent.getContext()).inflate(R.layout.listcontentstorechat,parent,false);
            ViewHolder viewHolder = new ViewHolder(rowView);
            if (rowView == null) {
                LayoutInflater inflater = getLayoutInflater();
                rowView = inflater.inflate(R.layout.listcontentstorechat, parent, false);
                viewHolder.messageText = (BubbleTextView) rowView.findViewById(R.id.message_text);
                viewHolder.messageUser = (TextView) rowView.findViewById(R.id.message_user);
                viewHolder.messageTime = (TextView) rowView.findViewById(R.id.message_time);
                rowView.setTag(viewHolder);
            } else {
                viewHolder = (ViewHolder) rowView.getTag();
            }
            // here setting up names and images




            return viewHolder;
        }

        @Override
        public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
            holder.messageText.setText(parkingList.get(position).getMessageText());
            holder.messageUser.setText(parkingList.get(position).getMessageUser());
            holder.messageTime.setText(DateFormat.format("dd-MM-yyyy (HH:mm:ss)", parkingList.get(position).getMessageTime()));
        }

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

我非常感谢您在帮助我方面的辛勤工作!

java android sql android-recyclerview
1个回答
0
投票

ViewHolderonCreateViewHolder()中始终不为空,并且其构造与您在getView()中使用的ListView不同”>

所以,请更改您的onCreateViewHolder

    @Override
    public MyAppAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,int viewType) {
        View rowView = LayoutInflater.from(parent.getContext()).inflate(R.layout.listcontentstorechat,parent,false);
        ViewHolder viewHolder = new ViewHolder(rowView);

        return viewHolder;
    }

0
投票

您的适配器返回空的Viewholder。

© www.soinside.com 2019 - 2024. All rights reserved.