Android 如何在二级布局中获取整型json值(回收器视图的末尾)

Android 如何在二级布局中获取整型json值(回收器视图的末尾),android,json,android-recyclerview,Android,Json,Android Recyclerview,这是我的json: { "status": "ok", "count": 10, "count_total": 65, "pages": 7, "posts": [ { "id": 3115, "type": "post", . . . }]} 想要在“我的回收器”视图的末尾获取页面值: 这是获取json的AsyncTask函数: if (jsonStr != null) { try {

这是我的json:

{
  "status": "ok",
  "count": 10,
  "count_total": 65,
  "pages": 7,
  "posts": [
    {
      "id": 3115,
      "type": "post",
.
.
.
}]}
想要在“我的回收器”视图的末尾获取页面值:

这是获取json的AsyncTask函数:

 if (jsonStr != null) {
                    try {

                        JSONObject jsonObj = new JSONObject(jsonStr);


                        int id=jsonObj.getInt("pages");


                        JSONArray posts = jsonObj.getJSONArray("posts");
                        for (int i = 0; i < posts.length(); i++) {
                            JSONObject c = posts.getJSONObject(i);

                            jsonContent jsonContent=new jsonContent();

                            jsonContent.title=c.getString("title");

                            //img
                           JSONObject post_img=c.getJSONObject("thumbnail_images");
                            for (int j=0;j<post_img.length();j++)
                            {
                                JSONObject v=post_img.getJSONObject("mom-portfolio-two");
                                jsonContent.imgurl=v.getString("url");
                            }
                            jsonContent.pages=id;
                            listcontent.add(jsonContent);

                        }
从这一行:

 viewHolder.pages.setText(Integer.toString(jcontent.get(i).pages));

pages是我的文本视图,用于在第二个layount end of recycler视图中显示pages int value

我从您的代码中找到了一个片段

    @Override
    public int getItemCount() {
            return jcontent.size()+1;
    }
换成

    @Override
    public int getItemCount() {
            return jcontent.size();
    }
这是因为列表计数从0开始,而不是从1开始

如果您正在尝试从10个大小的列表中获取10。它将抛出数组超出绑定的异常

你应该得到9才能得到第10个元素

if(i == jcontent.size()) {
            viewHolder.buttonnext.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Toast.makeText(context, "next", Toast.LENGTH_SHORT).show();
                }
            });
            viewHolder.buttonprev.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(context, "pre", Toast.LENGTH_SHORT).show();
                }
            });

            viewHolder.cardView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                }
            });

            viewHolder.pages.setText(Integer.toString(jcontent.get(i).pages));

        }
        else {

            viewHolder.title.setText(jcontent.get(i).title);

            Picasso.with(context).load(jcontent.get(i).imgurl).resize(300, 400).into(viewHolder.imageView);

        }
    }
在这段代码中,您将获得jcontent.get(i)这将产生问题


编辑2


似乎页面对于每个回收项目都是常量,然后从主JSON对象中提取它并作为单独的对象传递,或者从任何其他对象中获取它


谢谢

我从你的代码中找到了一个片段

    @Override
    public int getItemCount() {
            return jcontent.size()+1;
    }
换成

    @Override
    public int getItemCount() {
            return jcontent.size();
    }
这是因为列表计数从0开始,而不是从1开始

如果您正在尝试从10个大小的列表中获取10。它将抛出数组超出绑定的异常

你应该得到9才能得到第10个元素

if(i == jcontent.size()) {
            viewHolder.buttonnext.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Toast.makeText(context, "next", Toast.LENGTH_SHORT).show();
                }
            });
            viewHolder.buttonprev.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(context, "pre", Toast.LENGTH_SHORT).show();
                }
            });

            viewHolder.cardView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                }
            });

            viewHolder.pages.setText(Integer.toString(jcontent.get(i).pages));

        }
        else {

            viewHolder.title.setText(jcontent.get(i).title);

            Picasso.with(context).load(jcontent.get(i).imgurl).resize(300, 400).into(viewHolder.imageView);

        }
    }
在这段代码中,您将获得jcontent.get(i)这将产生问题


编辑2


似乎页面对于每个回收项目都是常量,然后从主JSON对象中提取它并作为单独的对象传递,或者从任何其他对象中获取它


谢谢你的列表内容大小是10(0到9)。
在onBindViewHolder中选中此行

if(i == jcontent.size()){ //here i == 10

 .......
 .......
 viewHolder.pages.setText(Integer.toString(jcontent.get(i).pages));
 //here you are accessing the 10 element of jcontent.
}

您的列表内容大小为10(0到9)。
在onBindViewHolder中选中此行

if(i == jcontent.size()){ //here i == 10

 .......
 .......
 viewHolder.pages.setText(Integer.toString(jcontent.get(i).pages));
 //here you are accessing the 10 element of jcontent.
}

我想你没有正确理解我的观点。如果我这样做,我的回收器视图不会显示回收器的二级布局末端。我的改变不是像什么?我这样做:viewHolder.pages.setText(Integer.toString(jcontent.pages));但是当删除页面时无法识别页面。实际上,你想实现什么?若你们的json对象只包含10个元素,那个么你们在第11页显示了什么,并没有任何细节?我在问题中明确地告诉了我的问题。当我删除这行viewHolder.pages.setText(Integer.toString(jcontent.pages));我的应用程序运行良好,并显示10cardview+我的第二布局以及您正在使用的第二布局jcontent.get(i)。没有具有该引用的元素。如果您没有执行这一行,那么您的代码绝对是完美的,您认为您没有正确理解我的观点。如果我这样做,我的回收器视图不会显示回收器的二级布局末端。我的改变不是像什么?我这样做:viewHolder.pages.setText(Integer.toString(jcontent.pages));但是当删除页面时无法识别页面。实际上,你想实现什么?若你们的json对象只包含10个元素,那个么你们在第11页显示了什么,并没有任何细节?我在问题中明确地告诉了我的问题。当我删除这行viewHolder.pages.setText(Integer.toString(jcontent.pages));我的应用程序运行良好,并显示10cardview+我的第二布局以及您正在使用的第二布局jcontent.get(i)。没有具有该引用的元素。如果您没有执行这一行,那么您的代码绝对是完美的,那么我如何修复它呢?如果您想要检索页数,只需对i==10执行jcontent.get(i-1.pages)。那么我如何修复它呢?如果您想要检索页数,只需对i==10执行jcontent.get(i-1.pages)。