首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试调用空对象引用上的接口方法'int java.util.List.size()‘-同时调用retrofit

尝试调用空对象引用上的接口方法'int java.util.List.size()‘-同时调用retrofit
EN

Stack Overflow用户
提问于 2020-09-30 05:32:34
回答 2查看 634关注 0票数 0

我编写了一个adapteractivity代码来获取数据。代码如下所示。

适配器:

代码语言:javascript
复制
private List<DellTransportList> customers;

    public DellTransportAdapter(List<DellTransportList> list) {
        this.customers = list;
    }

    @NonNull
    @Override
    public DellTransportAdapter.MyDriveViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.drive_recycler_item,parent,false);
        return new MyDriveViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull MyDriveViewHolder holder, int position) {
        DellTransportList customer = customers.get(holder.getAdapterPosition());

        TextView dataText = holder.mEmployeeId;
        TextView dataName = holder.mName;

        dataText.setText(customer.getEmployeeid());
        dataName.setText(customer.getName());

    }

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

    public class MyDriveViewHolder extends RecyclerView.ViewHolder {

        public TextView mName, mEmployeeId;

        public MyDriveViewHolder(View view) {
            super(view);
            mName = view.findViewById(R.id.mtv_view);
            mEmployeeId = view.findViewById(R.id.mtv_data_view);
        }
    }  

活性:

代码语言:javascript
复制
// RecyclerView
    mRecycler = findViewById(R.id.rv_drive);
    mRecycler.setHasFixedSize(true);
    mApiInterface = RetrofitInstance.getRetrofitInstance().create(DellTransportApiInterface.class);
    mList = new ArrayList();
    Call<List<DellTransportList>> call = mApiInterface.getcustomerName();
    call.enqueue(new Callback<List<DellTransportList>>() {
        @Override
        public void onResponse(@NotNull Call<List<DellTransportList>> call, @NotNull Response<List<DellTransportList>> response) {
            mList = response.body();
            mAdapter = new DellTransportAdapter(mList);
            mRecycler.setAdapter(mAdapter);
            mRecycler.setLayoutManager(new LinearLayoutManager(DriveActivity.this));
            mAdapter.notifyDataSetChanged();
            // Toast.makeText(getApplicationContext(),response,Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onFailure(@NotNull Call<List<DellTransportList>> call, @NotNull Throwable t) {
        }
    });
} 

运行该代码将导致以下错误:

com.dell.mycampus.view.adapter.DellTransportAdapter.getItemCount中的

java.lang.NullPointerException:尝试在空对象引用上调用接口方法'int java.util.List.size()‘

customers初始化了吗?

EN

回答 2

Stack Overflow用户

发布于 2020-09-30 05:40:48

private List<DellTransportList> customers;未初始化。请检查您的答复和您的ArrayList,以避免这个问题。

票数 0
EN

Stack Overflow用户

发布于 2020-09-30 05:48:06

同意@Ashish的回答,您还必须为使用LayoutManager的回收商设置setLayoutManager()

代码语言:javascript
复制
mList = response.body();
mAdapter = new DellTransportAdapter(mList);
mRecycler.setLayoutManager(new LinearLayoutManager(this));
mRecycler.setAdapter(mAdapter);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64131464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档