RecyclerView适配器中的java.lang.IndexOutOfBoundsException:索引:4,大小:4
我越来越 java.lang.IndexOutOfBoundsException:索引:4,大小:4 将项目设置为适配器时。我使用两个Pojo类来管理我想要获取的数据 这是我的适配器代码:RecyclerView适配器中的java.lang.IndexOutOfBoundsException:索引:4,大小:4,java,android,json,android-recyclerview,Java,Android,Json,Android Recyclerview,我越来越 java.lang.IndexOutOfBoundsException:索引:4,大小:4 将项目设置为适配器时。我使用两个Pojo类来管理我想要获取的数据 这是我的适配器代码: package com.kraftpaper.handler.activity.packaging.adapter; import android.content.DialogInterface; import android.text.TextUtils; import android.util.Log;
package com.kraftpaper.handler.activity.packaging.adapter;
import android.content.DialogInterface;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AlertDialog;
import androidx.recyclerview.widget.RecyclerView;
import com.kraftpaper.R;
import com.kraftpaper.handler.activity.packaging.POJO.TestPackage.testPOJO;
import com.kraftpaper.handler.activity.packaging.POJO.packingProductPOJO;
import com.kraftpaper.handler.activity.packaging.packingProduct;
import com.kraftpaper.util.PrefManager;
import com.kraftpaper.util.ProgressLoader;
import java.util.List;
public class packagingProductAdapter extends RecyclerView.Adapter<packagingProductAdapter.ViewHolder> {
private List<packingProductPOJO> list_data;
private List<testPOJO> testPOJO;
private packingProduct context;
String product_id, category_id, quantity = "0", sizeValue = "0";
private static int _value = 0;
PrefManager prefManager;
ProgressLoader progressLoader;
public packagingProductAdapter(List<packingProductPOJO> list_data, List<testPOJO> testPOJO, packingProduct context) {
this.list_data = list_data;
this.testPOJO = testPOJO;
this.context = context;
prefManager = new PrefManager(context);
progressLoader = new ProgressLoader(context);
}
@Override
public packagingProductAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.packing_product_cart_view_row,parent,false);
return new packagingProductAdapter.ViewHolder(view);
}
@Override
public void onBindViewHolder(final packagingProductAdapter.ViewHolder holder, final int position) {
final packingProductPOJO listData = list_data.get(position);
final testPOJO test_POJO = testPOJO.get(position);
if (test_POJO.equals("null")){
holder.linearLayout.setVisibility(View.GONE);
}else
{
Log.d("HEADING",test_POJO.getHeding());
if (test_POJO.getHeding().equals("MARSHAL")) {
holder.linearLayout.setVisibility(View.VISIBLE);
holder.heading.setText(test_POJO.getHeding());
holder.linearLayout.setBackgroundResource((R.drawable.rectangleborder));
}
if (test_POJO.getHeding().equals("KANGARO")) {
holder.linearLayout.setVisibility(View.VISIBLE);
holder.heading.setText(test_POJO.getHeding());
holder.linearLayout.setBackgroundResource((R.drawable.rectangleborder));
}
}
holder.produt_quantity.setText("= " +listData.getQuantity() );
if (listData.getProductPdf().equals("null")) {
holder.product_name.setText(listData.getCat_name());
}else {
holder.product_name.setText("DOWNLOAD PDF");
}
// holder.heading.setText(listData.getImage());
product_id = listData.getProductid();
category_id = listData.getImage();
holder.purchaseQty.setText(listData.getUser_quantity());
holder.pro_price.setText("Rs. " +listData.getPrice());
final String finalPro_qty = "0";
final String finalProduct_ID = product_id;
holder.count_up.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String removeProductId = listData.getId();
String removeQuantity = listData.getUser_quantity();
final int quantity = Integer.valueOf(removeQuantity) + 1;
if (quantity > Integer.parseInt(listData.getQuantity())){
Toast.makeText(context, "Insufficent Stock ", Toast.LENGTH_LONG).show();
}else {
context.add("pk@gmail.com", String.valueOf(quantity), finalProduct_ID, "manual", category_id, holder.purchaseQty, position, "0");
}
}
});
holder.count_down.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String removeProductId = listData.getId();
String removeQuantity = listData.getUser_quantity();
final int quantity = Integer.valueOf(removeQuantity) - 1;
context.add("pk@gmail.com", String.valueOf(quantity), finalProduct_ID, "manual", category_id, holder.purchaseQty, position, "0");
}
});
holder.purchaseQty.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// get alert_dialog.xml view
LayoutInflater li = LayoutInflater.from(context);
View promptsView = li.inflate(R.layout.alert_dialog, null);
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
context);
// set alert_dialog.xml to alertdialog builder
alertDialogBuilder.setView(promptsView);
final EditText userSize = (EditText) promptsView.findViewById(R.id.etUserInput);
final TextView enterQuantity = promptsView.findViewById(R.id.enterQuantity);
// set dialog message
alertDialogBuilder
.setCancelable(false)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// Toast.makeText(context, "Entered: "+userInput.getText().toString(), Toast.LENGTH_LONG).show();
final String quantityValue = (userSize.getText().toString());
if (TextUtils.isEmpty(quantityValue)) {
userSize.setError("Quantity cannot be Empty");
Toast.makeText(context, "Quantity cannot be Empty", Toast.LENGTH_LONG).show();
userSize.requestFocus();
return;
}
final int quantity = Integer.valueOf(quantityValue);
if (quantity > Integer.parseInt(listData.getQuantity())){
Toast.makeText(context, "Insufficent Stock ", Toast.LENGTH_LONG).show();
}else {
context.add("pk@gmail.com", String.valueOf(quantity), finalProduct_ID, "manual", category_id, holder.purchaseQty, position, sizeValue);
}
}
})
.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
// create alert dialog
AlertDialog alertDialog = alertDialogBuilder.create();
// show it
alertDialog.show();
}
});
}
@Override
public int getItemCount() {
return list_data.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
private ImageView img;
private TextView purchaseQty, product_name, produt_quantity, heading, pro_price;
private ImageView count_up, count_down;
private LinearLayout linearLayout, topview, userQuantityLayout;
public ViewHolder(View itemView) {
super(itemView);
heading = itemView.findViewById(R.id.heading);
purchaseQty= itemView.findViewById(R.id.txtItemQty);
produt_quantity= itemView.findViewById(R.id.total_qty);
product_name=itemView.findViewById(R.id.pro_name);
purchaseQty.setText("0");
count_up = itemView.findViewById(R.id.count_up);
count_down = itemView.findViewById(R.id.count_down);
pro_price = itemView.findViewById(R.id.pro_price);
// purchaseQty.setBackground(context.getResources().getDrawable(R.drawable.rectangleborder));
topview = itemView.findViewById(R.id.topview);
topview.setVisibility(View.GONE);
linearLayout = itemView.findViewById(R.id.heading_layout);
}
}
}
以下是我想要实现的目标:
这就是我得到的:
这就是我想要的:
发生此错误是因为列表
testPOJO
和list\u数据
的大小不相等。
从对象newList
向testPOJO
添加对象时,应检查其大小是否与list\u data
相同。如果其中一个有更多的对象,无论如何都会出现错误。
Java命名约定回顾
变量名应以小写字符开头,并使用驼峰大小写模式。
类名应该以大写字母开头,并且遵循驼峰大小写模型。Java命名约定在变量名中没有下划线,尤其是前导下划线。Java不是Python。也许你可以提出你的问题并发布你得到的信息?等等,我将用StatTrace提供我的错误代码,其中我得到的是errorfinal testPOJO test\u POJO=testPOJO.get(position);这是在这一行,但我不知道为什么方法
onBindViewHolder()调用时使用位置=4,但是testPOJO
列表包含的项不到五项。我知道它们的大小不一样,我让它们像编辑两个列表一样工作,因此我可以以任何其他方式处理错误,并且也可以工作。如果您在中返回列表数据的大小
getItemCount()
方法,并对testPOJO
使用相同的大小。您必须使用另一个变量来迭代testPOJO
。是否可以为此添加代码?我不理解testPOJO
的目的,以及为什么添加它和其他变量以及正在使用的额外列表对象。此外,您的代码完全可以重构。我建议您学习一些重构,然后从头开始编写。
private void fetchCartData() {
if (list_data!=null && list_data.size()>0){
list_data.clear();
}
if (testPOJO!=null && testPOJO.size()>0){
testPOJO.clear();
}
progressLoader.startProgress(packingProduct.this);
final String getProduct = "myTestUrl";
StringRequest stringRequest = new StringRequest(Request.Method.POST, getProduct, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject jsonObject = new JSONObject(response);
String status = jsonObject.getString("message");
if (status.equals("Product Received successful")){
// String sss = jsonObject2.getString("data");
// Log.d("PACKING", sss);
JSONArray jsonArray = jsonObject.getJSONArray("data");
for (int i =0; i<jsonArray.length(); i++)
{
JSONObject jsonObject1 = jsonArray.getJSONObject(i);
jsonDataString = jsonArray.toString();
jsonDataString1 = jsonObject1.toString();
Log.d("DATA", jsonDataString1);
String head = jsonObject1.getString("head");
if (head.equals("KANGARO")) {
packingProductPOJO product1 = new packingProductPOJO(jsonObject1.optString("head"),
jsonObject1.optString("product_name"),
jsonObject1.optString("category_id"),
jsonObject1.optString("quantity"),
jsonObject1.optString("product_id"),
jsonObject1.optString("user_quantity"),
jsonObject1.optString("price"),
jsonObject1.optString("ask_size"),
jsonObject1.optString("product_pdf")
);
list_data.add(product1);
}
if (head.equals("MARSHAL")){
packingProductPOJO product1 = new packingProductPOJO(jsonObject1.optString("head"),
jsonObject1.optString("product_name"),
jsonObject1.optString("category_id"),
jsonObject1.optString("quantity"),
jsonObject1.optString("product_id"),
jsonObject1.optString("user_quantity"),
jsonObject1.optString("price"),
jsonObject1.optString("ask_size"),
jsonObject1.optString("product_pdf")
);
list_data.add(product1);
}
}
List<Map<String, String>> listOfMap = new ArrayList<>();
listOfMap = createListMap();
Map<String, List<String>> tempMap = new HashMap<>();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
listOfMap.forEach(
map -> {
Set<String> keySet = new HashSet<>(map.keySet());
keySet.forEach(
key -> {
// key = "head";
List<String> tempValue = tempMap.get(key);
// Log.d("VAISEDATA", tempMap.toString());
if (Objects.nonNull(tempValue) && tempValue.contains(map.get(key))) {
map.remove(key);
} else {
tempMap.put(key, Arrays.asList(map.get(key)));
}
});
});
}
// System.out.println("NEWDATA EDITED"+createListMap(listOfMap));
JSONArray jsArray = new JSONArray(listOfMap);
// System.out.println("NEWDATA EDITED"+ jsArray.toString());
ArrayList<String> finalList = new ArrayList<String>();
for (int l = 0; l< jsArray.length(); l++){
JSONObject jsonObject2 = jsArray.getJSONObject(l);
heading = jsonObject2.optString("head");
// Log.d("HEADINGGGGG", heading);
// if (heading.equals("MARSHAL"))
finalList.add(heading);
}
newDistictList.add(heading);
List<String> newList;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
newList = finalList.stream().distinct().collect(Collectors.toList());
// Print the ArrayList with duplicates removed
System.out.println("ArrayList with duplicates removed: "
+ finalList);
// Print the ArrayList with duplicates removed
Log.d("ArrayList with"
, newList.toString() );
{
StringBuilder sb = new StringBuilder();
for (String s : newList)
{
sb.append(s);
sb.append("\t");
testPOJO test_POJO = new testPOJO(s);
testPOJO.add(test_POJO);
progressLoader.dismissProgress(packingProduct.this);
}
}
}
adapter=new packagingProductAdapter(list_data, testPOJO, packingProduct.this);
// adapter=new packagingProductAdapter();
// adapter.setSecondList(testPOJO);
recyclerView.setLayoutManager(new LinearLayoutManager(packingProduct.this));
recyclerView.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
else {
progressLoader.dismissProgress(packingProduct.this);
Toast.makeText(packingProduct.this,"Data not found", Toast.LENGTH_LONG).show();
}
}//catch (JSONException e)
catch (JSONException | IOException e)
{
progressLoader.dismissProgress(packingProduct.this);
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
progressLoader.dismissProgress(packingProduct.this);
Toast.makeText(packingProduct.this, "DATA not found", Toast.LENGTH_LONG).show();
}
}){
};
RequestQueue requestQueue = Volley.newRequestQueue(packingProduct.this);
stringRequest.setRetryPolicy(new DefaultRetryPolicy(
30000,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
requestQueue.add(stringRequest);
}
Process: com.cls.kraftpaper, PID: 31530
java.lang.IndexOutOfBoundsException: Index: 4, Size: 4
at java.util.ArrayList.get(ArrayList.java:437)
at com.kraftpaper.handler.activity.packaging.adapter.packagingProductAdapter.onBindViewHolder(packagingProductAdapter.java:59)
at com.kraftpaper.handler.activity.packaging.adapter.packagingProductAdapter.onBindViewHolder(packagingProductAdapter.java:27)
at androidx.recyclerview.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:7065)
at androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:7107)
at androidx.recyclerview.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:6012)
at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6279)
at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6118)
at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6114)
at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2303)
at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1627)
at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1587)
at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:665)
at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4134)
at androidx.recyclerview.widget.RecyclerView.onMeasure(RecyclerView.java:3540)
at android.view.View.measure(View.java:24845)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6908)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
at android.view.View.measure(View.java:24845)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6908)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
at android.view.View.measure(View.java:24845)
at android.widget.ScrollView.measureChildWithMargins(ScrollView.java:1472)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:221)
at android.widget.ScrollView.onMeasure(ScrollView.java:498)
at android.view.View.measure(View.java:24845)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6908)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
at android.view.View.measure(View.java:24845)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6908)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:221)
at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:143)
at android.view.View.measure(View.java:24845)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6908)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
at android.view.View.measure(View.java:24845)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6908)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:221)
at android.view.View.measure(View.java:24845)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6908)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
at android.view.View.measure(View.java:24845)
E/AndroidRuntime: at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6908)
at com.android.internal.policy.DecorView.measureChildWithMargins(DecorView.java:3029)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:221)
at com.android.internal.policy.DecorView.onMeasure(DecorView.java:863)
at android.view.View.measure(View.java:24845)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:3218)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:2004)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2296)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1888)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7908)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1101)
at android.view.Choreographer.doCallbacks(Choreographer.java:917)
at android.view.Choreographer.doFrame(Choreographer.java:847)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1086)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:230)
at android.app.ActivityThread.main(ActivityThread.java:7778)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:526)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1034)