#java #android #arrays #android-fragments
Вопрос:
Я получаю информацию от модернизации из файла и заполняю массив в действии в onCreate. После создания фрагмента и его настройки программа вылетает (в getItemCount) и пишет, что массив пуст и не понимает, что я хочу вывести. Как я могу заполнить массив до того, как класс адаптера фрагмента будет инициализирован?
Способ заполнения данных в массив
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)
Примечание:
Я слаб в программировании на Android, поэтому было бы неплохо, если бы вы могли подробно объяснить, что следует ниже
Ответ №1:
вы можете попробовать это в классах адаптеров
List<Worker> workerList = new List<Worker>()
setList(List<Worker> workerList){
workerList.clear();
workerList.addAll(workerList);
notifyDataSetchanged();
}
надеюсь, это поможет вам также предотвратить сбой и обновить список адаптеров, когда вы получите список ответов.также вы можете попробовать этот способ в классе действий, чтобы инициализировать список перед его использованием и обновить его позже.
Комментарии:
1. Итак, создайте класс в адаптере? и по какой-то причине я не хочу инициализировать
notifyDataSetchanged()