Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RecyclerView适配器中的java.lang.IndexOutOfBoundsException:索引:4,大小:4_Java_Android_Json_Android Recyclerview - Fatal编程技术网

RecyclerView适配器中的java.lang.IndexOutOfBoundsException:索引:4,大小:4

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;

我越来越

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;
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)