如何在调用 AdapterFragment 之前正确填充数组?爪哇

Posted

技术标签:

【中文标题】如何在调用 AdapterFragment 之前正确填充数组?爪哇【英文标题】:How to correctly fill the array before calling AdapterFragment? java 【发布时间】:2021-09-29 22:36:02 【问题描述】:

我从文件中获取改造信息,并将数组填充到 OnCreate 中的 Activity 中。创建片段并设置它后,程序崩溃(在 getItemCount 中)并写入数组为空并且不理解我想要输出的内容。如何在 sn-p 的 Adapter 类初始化之前填充数组?

将数据填充到数组中的方法

       public void onResponse(Call<Example> call, Response<Example> response) 
            Example examples = response.body();
            for(int i = 0; i < examples.getResponse().size(); i++)
                String f_name = response.body().getResponse().get(i).getfName();
                String l_name = response.body().getResponse().get(i).getlName();
                String birthday = response.body().getResponse().get(i).getBirthday();
                String SpecName = response.body().getResponse().get(i).getSpecialty()
                        .iterator().next().getName();
                String SpecId =  response.body().getResponse().iterator().next().getSpecialty()
                        .iterator().next().getSpecialtyId().toString();
                String AvatarUrl = response.body().getResponse().get(i).getAvatrUrl();
                workerList.add(new Worker(f_name, l_name, birthday, SpecName, SpecId, AvatarUrl));

            
            CurrectName(workerList);
            NewDataFormat(workerList);

        

片段适配器中的一段代码

public class dataAdapter extends RecyclerView.Adapter<dataAdapter.dataViewHolder> 
    Context context;
    List<Worker> workerList;

    public dataAdapter(Context context, List<Worker> workerList)
        this.context = context;
        this.workerList = workerList;
    

    @Override
    public dataViewHolder onCreateViewHolder(ViewGroup parent, int viewType) 
        View view = LayoutInflater.from(context).inflate(R.layout.single_data_fragment, parent, false);
        return new dataViewHolder(view);
    

    @Override
    public void onBindViewHolder(dataAdapter.dataViewHolder holder, int position) 

        holder.FName.setText(workerList.get(position).getFname());
        holder.LName.setText(workerList.get(position).getLname());
        holder.Age.setText(workerList.get(position).getAge());
        if (workerList.get(position).getAvatarUrl() != "")
            Picasso.with(context).load(workerList.get(position).getAvatarUrl()).placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_launcher).into(holder.imageView);
         else 
            Picasso.with(context).load(R.mipmap.ic_launcher).placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_launcher).into(holder.imageView);
        

    

    @Override
    public int getItemCount() 
        return workerList.size();
    

这是错误

java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
            at com.example.applast.FirstFrame.dataAdapter.getItemCount(dataAdapter.java:52)

注意: EM> 我在android编程方面很弱,所以如果你能详细解释一下下面的内容会很好

【问题讨论】:

【参考方案1】:

你可以在适配器类中试试这个

List<Worker> workerList = new List<Worker>()
setList(List<Worker> workerList)
  workerList.clear(); 
  workerList.addAll(workerList);
  notifyDataSetchanged();

希望它也可以帮助您防止崩溃并在您获得响应列表时更新您的适配器列表。您也可以在活动类中尝试这种方式来在使用它之前初始化列表并稍后更新它。

【讨论】:

那么在适配器中创建一个类?出于某种原因,我不想初始化notifyDataSetchanged()

以上是关于如何在调用 AdapterFragment 之前正确填充数组?爪哇的主要内容,如果未能解决你的问题,请参考以下文章

将按钮调用的图像加载到按钮的背景中[关闭]

如何在调用另一个方法之前等待调用 didUpdateLocations 方法?

在 IBAction 中调用其他函数之前,如何使函数完成?

如何在调用 requestPermissions 之前知道用户检查“不再询问”

如何保护 QThread 函数,使其在完成之前的工作之前不会再次被调用?

如何在每次测试之前重置 Jest 模拟函数调用计数