Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试从字段';android.view.view androidx.recyclerview.widget.recyclerview$ViewHolder.itemView';关于空对象引用_Java_Android_Sql_Android Recyclerview - Fatal编程技术网

Java 尝试从字段';android.view.view androidx.recyclerview.widget.recyclerview$ViewHolder.itemView';关于空对象引用

Java 尝试从字段';android.view.view androidx.recyclerview.widget.recyclerview$ViewHolder.itemView';关于空对象引用,java,android,sql,android-recyclerview,Java,Android,Sql,Android Recyclerview,我正在制作一个从sql获取数据并将其放入循环视图的应用程序。我第一次在列表视图中尝试了它,但我发现在循环视图中它更容易。总之,它基本上类似于聊天系统应用程序。当我将数据添加到循环视图中时,它会在logcat中显示此错误 java.lang.NullPointerException: Attempt to read from field 'android.view.View androidx.recyclerview.widget.RecyclerView$ViewH

我正在制作一个从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();
            }
        }


I would really appreciate your hard work in helping me!!
EDIT2:经过一些改进后,它现在在logcat中返回一个错误,说明:

 java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
        at com.example.medicnes.ChatActivity$MyAppAdapter.onBindViewHolder(ChatActivity.java:275)
        at com.example.medicnes.ChatActivity$MyAppAdapter.onBindViewHolder(ChatActivity.java:225)
        at androidx.recyclerview.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:7065)
        at androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:7107)
        at androidx.recyclerview.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:6012)
        at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6279)
        at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6118)
        at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6114)

onCreateViewHolder()
中的
ViewHolder
始终不为空,因为在此方法中创建的
View
不能为空

onCreateViewHolder()
的构建方式不同于用于创建
ListView
适配器的
getView()

因此,请将您的
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;
        }
编辑:现在(实际上之前)它不会将文本添加到回收视图中。对此有何帮助?我已经更新了我的问题

您从
getItemCount()
返回的列表大小错误,因为适配器使用
arraylist
作为其数据列表,因此您需要返回其大小

因此,将
getItemCount()
更改为

@Override
 public int getItemCount() {
     if (arraylist != null)
         return arraylist.size();
     else
         return 0;
 }
编辑2:

您没有使用
.findViewById()
初始化行项目布局中的视图,因此将
ViewHolder
构造函数更改为

public ViewHolder(@NonNull View itemView) {
    super(itemView);
    messageText = itemView.findViewById(R.id.message_text);
    messageUser = itemView.findViewById(R.id.message_user);
    messageTime = itemView.findViewById(R.id.message_time);
}

您的适配器返回空的viewholder

rowView
在此处始终为非空,因此此条件:

从不命中,而是将代码转到else分支

viewHolder
替换为null,然后返回该值

这部分代码看起来像是试图将旧的ListView适配器改编为RecyclerView适配器。您不需要将
setTag()
/
getTag()
与RecyclerView一起使用


只需创建并初始化视图持有者,然后从方法中返回即可。

谢谢,但现在(实际上之前)它不会将文本添加到回收视图中有帮助吗?谢谢,但现在(实际上之前)它不会将文本添加到回收视图中有帮助吗?我已经更新了我的问题@感谢您的评论。请提供listcontentstorechat。xml@VarroxSystems谢谢请检查更新的答案我已经这样做了,但是现在它在logcat中返回一个错误。一秒钟后,我将更新问题更新问题,再次感谢您的辛勤工作!
@Override
 public int getItemCount() {
     if (arraylist != null)
         return arraylist.size();
     else
         return 0;
 }
 java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
        at com.example.medicnes.ChatActivity$MyAppAdapter.onBindViewHolder(ChatActivity.java:275)
        at com.example.medicnes.ChatActivity$MyAppAdapter.onBindViewHolder(ChatActivity.java:225)
        at androidx.recyclerview.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:7065)
        at androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:7107)
        at androidx.recyclerview.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:6012)
        at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6279)
        at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6118)
        at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6114)
public ViewHolder(@NonNull View itemView) {
    super(itemView);
    messageText = itemView.findViewById(R.id.message_text);
    messageUser = itemView.findViewById(R.id.message_user);
    messageTime = itemView.findViewById(R.id.message_time);
}
View rowView = LayoutInflater.from(parent.getContext()).inflate(R.layout.listcontentstorechat,parent,false);
if (rowView == null) {
} else {
    viewHolder = (ViewHolder) rowView.getTag();
}