【问题标题】:how fix NullPointerException? [duplicate]如何修复 NullPointerException? [复制]
【发布时间】:2020-04-23 07:45:17
【问题描述】:

我是 android 编程的新手,我想将 JSON 添加到我的 recyclerview 我得到的适配器未连接到跳过布局,但我的 CustomAdapter 也给了我 NullPointerException。

我的自定义适配器

 public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.CustomViewHolder> {
 private List<RetroProduct> dataList;
 private Context context;
 CustomAdapter(Context context, List< RetroProduct > dataList){
     this.context = context;
     this.dataList = dataList;
 }

 class CustomViewHolder extends RecyclerView.ViewHolder {
     final View mView;

     TextView goodsId,categoryTitle,number,title1,title2;

     CustomViewHolder(View itemView) {
         super(itemView);
         mView = itemView;

         goodsId = mView.findViewById(R.id.tv_goodsId);
         categoryTitle = mView.findViewById(R.id.tv_categoryTitle);
         number = mView.findViewById(R.id.tv_number);
         title1 = mView.findViewById(R.id.tv_title1);
         title2 = mView.findViewById(R.id.tv_title2);

     }
 }

 @NonNull
 @Override
 public CustomViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

     LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
     View view = layoutInflater.inflate(R.layout.item_row, parent, false);
     return new CustomViewHolder(view);
 }

 @Override
 public void onBindViewHolder(CustomViewHolder holder, int position) {

     holder.goodsId.setText(dataList.get(position).getGoodsId());
     holder.categoryTitle.setText(dataList.get(position).getCategoryTitle());
     holder.title1.setText(dataList.get(position).getTitle1());
     holder.title2.setText(dataList.get(position).getTitle2());
     holder.number.setText(dataList.get(position).getNumber());
 }

 @Override
 public int getItemCount() {

     return dataList.size();
 }
 }

我得到了 NullPointerException

 return dataList.size();

我现在该怎么办?给它价值,否则我不知道。

主活动

public class MainActivity extends AppCompatActivity {
private CustomAdapter adapter;
private RecyclerView recyclerView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    GetDataService service =   
       RetrofitClientInstance.getRetrofitInstance()
                             .create(GetDataService.class);

    Call< List<RetroProduct> > call = service.getAllProducts();
    call.enqueue(new Callback<List<RetroProduct>>() {
        @Override
        public void onResponse(Call<List<RetroProduct>> call,  
    Response<List<RetroProduct>> response) {
            generateDataList(response.body());
            LinearLayoutManager manager = new  
    LinearLayoutManager(MainActivity.this);
            recyclerView.setLayoutManager(manager);
            recyclerView.setHasFixedSize(true);
            recyclerView.setAdapter(adapter);
            adapter.notifyDataSetChanged();
        }

        @Override
        public void onFailure(Call<List<RetroProduct>> call, Throwable t)   
   {
            Toast.makeText(MainActivity.this, "null", 
   Toast.LENGTH_SHORT).show();
        }
    });
}


private void generateDataList(List<RetroProduct> productList) {

    recyclerView = findViewById(R.id.recycler_view);
    adapter = new CustomAdapter(this,productList);

     }
  }

【问题讨论】:

  • 分享您使用 recyclerview 的代码。
  • 我搜索了很多,但我无法修复它。
  • 分享活动代码或片段。
  • 我得到的人(没有附加适配器;跳过布局)我应该把 setAdapter 放在哪里。
  • yehhh 谢谢你所做的一切

标签: android-recyclerview retrofit


【解决方案1】:
 @Override
 public int getItemCount() {
     if(dataList!=null)
         return dataList.size();
     else
         return 0;
 }

如上调用 Arraylist 的 size() 方法前添加空检查

【讨论】:

  • 现在这个->没有连接适配器;跳过布局
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
相关资源
最近更新 更多