【发布时间】:2021-05-27 19:32:41
【问题描述】:
我知道之前有人问过这个问题,但我无法理解并将其集成到我的代码中。我有 2 个数组列表。一个用于 api 数据,另一个用于数据库数据。数据库的数组列表在单独时工作成功。但是当我添加 API 的数组列表时,我得到了这个异常 java.lang.IndexOutOfBoundsException:索引:0,大小:0
这是片段文件;
RecyclerView cuzdan_rc;
private ArrayList<CuzdanModel> cuzdanModels;
CuzdanAdapter adapter;
private VeriTabani vt;
CoinMarketApi api;
private List<Datum> cuzdanList =null;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.varliklarim_fragment_layout, container, false);
vt = new VeriTabani(getActivity());
cuzdan_rc=rootView.findViewById(R.id.cuzdan_recycler_view);
api = ApiClient.getClient().create(CoinMarketApi.class);
CoinList();
RecyclerBagla(rootView);
return rootView;
}
private void RecyclerBagla(View rootView) {
cuzdan_rc=rootView.findViewById(R.id.cuzdan_recycler_view);
cuzdanList = new ArrayList<>();
cuzdanModels = new CuzdanDao().Cuzdan(vt);
adapter = new CuzdanAdapter(getActivity(),cuzdanModels,cuzdanList);
cuzdan_rc.setAdapter(adapter);
cuzdan_rc.setLayoutManager(new LinearLayoutManager(getActivity()));
}
public void CoinList() {
Call<CryptoModel> call = api.coinMarketListCall("500");
call.enqueue(new Callback<CryptoModel>() {
@Override
public void onResponse(Call<CryptoModel> call, Response<CryptoModel> response) {
CryptoModel list = response.body();
cuzdanList.clear();
cuzdanList.addAll(list.getData());
adapter.notifyDataSetChanged();
}
@Override
public void onFailure(Call<CryptoModel> call, Throwable t) {
Toast.makeText(getActivity(), "onFailure", Toast.LENGTH_SHORT).show();
Log.d("XXXX", t.getLocalizedMessage());
call.cancel();
}
});
}
这是 Adaptar 类;
public class CuzdanAdapter extends RecyclerView.Adapter<CuzdanAdapter.CardTasarimTutucu> {
private Context context;
private List<CuzdanModel> cuzdanList;
private List<Datum> mData;
public CuzdanAdapter(Context context, List<CuzdanModel> cuzdanList,List<Datum> mData) {
this.context = context;
this.cuzdanList = cuzdanList;
this.mData=mData;
}
@NonNull
@Override
public CardTasarimTutucu onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.cuzdan_rc_tasarim, parent, false);
return new CardTasarimTutucu(view);
}
@Override
public void onBindViewHolder(@NonNull CardTasarimTutucu holder, int position) {
Datum datum = mData.get(position);
CuzdanModel cuzdan = cuzdanList.get(position);
holder.textViewCoinDegeriAdapter.setText(String.valueOf(datum.getQuote().getUSD().getPrice()));
holder.textViewCoinAdi.setText(cuzdan.getCoin_adi());
holder.textViewAlisFiyatiAdapter.setText(String.format("%.3f",cuzdan.getCoin_alis_fiyati()));
holder.textViewCoinAdediAdapter.setText(String.format("%.3f",cuzdan.getCoin_alis_adeti()));
}
@Override
public int getItemCount() {
return cuzdanList.size();
}
public class CardTasarimTutucu extends RecyclerView.ViewHolder {
private TextView textViewCoinAdi, textViewCoinDegisimAdapter,
textViewCoinAdediAdapter, textViewCoinDegeriAdapter, textViewAlisFiyatiAdapter;
private CardView cuzdan_cardView;
public CardTasarimTutucu(@NonNull View itemView) {
super(itemView);
textViewCoinAdi = itemView.findViewById(R.id.textViewCoinAdiAdapter);
textViewCoinDegisimAdapter = itemView.findViewById(R.id.textViewCoinDegisimAdapter);
textViewCoinAdediAdapter = itemView.findViewById(R.id.textViewCoinAdediAdapter);
textViewCoinDegeriAdapter = itemView.findViewById(R.id.textViewCoinDegeriAdapter);
textViewAlisFiyatiAdapter = itemView.findViewById(R.id.textViewAlisFiyatiAdapter);
cuzdan_cardView = itemView.findViewById(R.id.cuzdan_cardView);
}
}
}
为什么它不起作用?我需要你的帮助。
【问题讨论】:
-
不知道你想做什么。我没有看到 2 个列表。请告诉我们你从哪里得到这个数组越界异常。
-
请在设置适配器之前验证 cuzdanModels 是否包含数据。
-
@DavidWasser 数组在适配器中定义。错误如下CuzdanAdapter.onBindViewHolder(CuzdanAdapter.java:38) CuzdanAdapter.onBindViewHolder(CuzdanAdapter.java:17) java 38 指向这一行 ''Datum datum = mData.get(position);'' 和 java 17 指向这一行“公共类 CuzdanAdapter 扩展 RecyclerView.Adapter
” -
@hafiza 我已经在另一个片段中使用 cuzdanModels 并且它正在工作。
标签: java android android-recyclerview android-adapter