//MyFoodListAdapter.java
package com.georgettemillimo.fudiapp.Adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.georgettemillimo.fudiapp.Model.FoodModel;
import com.georgettemillimo.fudiapp.R;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.Unbinder;
public class MyFoodListAdapter extends RecyclerView.Adapter<MyFoodListAdapter.MyViewHolder> {
private Context context;
private List <FoodModel> foodModelList;
public MyFoodListAdapter(Context context, List<FoodModel> foodModelList) {
this.context = context;
this.foodModelList = foodModelList;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new MyViewHolder(LayoutInflater.from(context).inflate(R.layout.layout_food_item,parent,false));
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
Glide.with(context).load(foodModelList.get(position).getImage()).into(holder.imgs_food_image);
holder.txts_food_name.setText(new StringBuilder("").append(foodModelList.get(position).getName()));
holder.txts_food_price.setText(new StringBuilder("Ksh").append(foodModelList.get(position).getPrice()));
}
@Override
public int getItemCount() {
return foodModelList.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder{
private Unbinder unbinder;
@BindView(R.id.txt_food_name)
TextView txts_food_name;
@BindView(R.id.txt_food_price)
TextView txts_food_price;
@BindView(R.id.img_food_image)
ImageView imgs_food_image;
@BindView(R.id.img_fav)
ImageView img_fav;
@BindView(R.id.img_quick_cart)
ImageView img_quick_cart;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
unbinder = ButterKnife.bind(this,itemView);
}
}
}
当我运行该应用程序时,它崩溃并在Logcat上显示以下错误
//Error on LOGCAT No adapter attached; skipping layout No adapter attached; skipping layout No adapter attached; skipping layout No adapter attached; skipping layout FATAL EXCEPTION: main Process: com.georgettemillimo.fudiapp, PID: 4562 java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference at com.georgettemillimo.fudiapp.Adapter.MyFoodListAdapter.getItemCount(MyFoodListAdapter.java:56) at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep1(RecyclerView.java:4044) at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:3849) at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4404) at android.view.View.layout(View.java:15671) at android.view.ViewGroup.layout(ViewGroup.java:5038) at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1076) at android.view.View.layout(View.java:15671) at android.view.ViewGroup.layout(ViewGroup.java:5038) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579) at android.widget.FrameLayout.onLayout(FrameLayout.java:514) at android.view.View.layout(View.java:15671) at android.view.ViewGroup.layout(ViewGroup.java:5038) at androidx.constraintlayout.widget.ConstraintLayout.onLayout(ConstraintLayout.java:1915) at android.view.View.layout(View.java:15671) at android.view.ViewGroup.layout(ViewGroup.java:5038) at com.google.android.material.appbar.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:148) at com.google.android.material.appbar.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:43) at com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1892) at androidx.coordinatorlayout.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:918) at android.view.View.layout(View.java:15671) at android.view.ViewGroup.layout(ViewGroup.java:5038) at androidx.drawerlayout.widget.DrawerLayout.onLayout(DrawerLayout.java:1231) at android.view.View.layout(View.java:15671) at android.view.ViewGroup.layout(ViewGroup.java:5038) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579) at android.widget.FrameLayout.onLayout(FrameLayout.java:514) at android.view.View.layout(View.java:15671) at android.view.ViewGroup.layout(ViewGroup.java:5038) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557) at android.widget.LinearLayout.onLayout(LinearLayout.java:1466) at android.view.View.layout(View.java:15671) at android.view.ViewGroup.layout(ViewGroup.java:5038) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579) at android.widget.FrameLayout.onLayout(FrameLayout.java:514) at android.view.View.layout(View.java:15671) at android.view.ViewGroup.layout(ViewGroup.java:5038) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557) at android.widget.LinearLayout.onLayout(LinearLayout.java:1466) at android.view.View.layout(View.java:15671) at android.view.ViewGroup.layout(ViewGroup.java:5038) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579) at android.widget.FrameLayout.onLayout(FrameLayout.java:514) at android.view.View.layout(View.java:15671) at android.view.ViewGroup.layout(ViewGroup.java:5038) at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2110) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1867) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1085) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5909) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767) at android.view.Choreographer.doCallbacks(Choreographer.java:580) at android.view.Choreographer.doFrame(Choreographer.java:550) at android.view.Choreographer FrameDisplayEventReceiver.run(Choreographer.java:753) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5293) at java.lang.reflec
[当我尝试调用方法getItemCount
来显示食物详细信息时,应用程序崩溃,并显示消息。我找不到错误,我的FoodModel
刚刚被初始化好。我不确定麻烦在哪里。请帮助。
getItemCount
中的MyFoodListAdapter.java
功能修改为:@Override
public int getItemCount() {
return foodModelList!=null?foodModelList.size():0;
}
因此,如果在调用getItemCount
时列表为空,则它将返回0。
private List <FoodModel> foodModelList = new ArrayList();
如果不初始化列表,则在调用getItemCount()时,它将尝试调用空对象的方法。要么在其声明上初始化它,要么确保在调用构造函数时不传递null。