简体   繁体   English

在 recyclerview 中访问 JSON 数组中的项目成员

[英]Accessing members of items in a JSON Array in recyclerview

hello could you help me about a problem I had 5 days ago I get the all collection of json involved but only in json format, but I want to get only some some attributes like nombre_alumnos of the collection of json_array alumnos_involucrados你好,你能帮我解决一个我 5 天前遇到的问题,我得到了所有的 json 集合,但只有 json 格式,但我只想得到一些属性,比如 json_array alumnos_involucrados 集合的一些属性

Mi JSON RESPONSE小米 JSON 响应

[
        {
            "id": 1,
            "fecha_creacion": "2019-11-19 03:05:47",
            "observacion": "observación 1",
            "profesor_nombre": "Profesor1",
            "profesor_apellido": "Profesor1",
            "falta": "Acoso",
            "lugar": "Aula 1",
            "grado": "3",
            "seccion": "A",
            "alumnos_involucrados": [
                {
                    "id_alumno": 1,
                    "nombre_alumno": "Ariana",
                    "ape_paterno": "Verástegui",
                    "ape_materno": "Pedraza"
                },
                {
                    "id_alumno": 4,
                    "nombre_alumno": "Alvaro",
                    "ape_paterno": "Castañeda",
                    "ape_materno": "Losio"
                },
                {
                    "id_alumno": 5,
                    "nombre_alumno": "Sebas",
                    "ape_paterno": "Mendez",
                    "ape_materno": "Cotera"
                }
            ]
        }
    ]

--------------------------------------------------------------------------------- -------------------------------------------------- -------------------------------

ADAPTER RECYCLERVIEW适配器回收器视图

   public class AdapterReportes  extends RecyclerView.Adapter<AdapterReportes.ViewHolderReportes> implements View.OnClickListener {
        Dialog myDialog;

    Context context;


    private List<Incidencias> listaincidencias;
    private View.OnClickListener listener;
    private ListView listviewa;

    public AdapterReportes() {
        this.listaincidencias =new ArrayList<>();
    }


    public void setListaincidencias(List<Incidencias> listaincidencias) {
        this.listaincidencias = listaincidencias;
    }


    @Override
    public ViewHolderReportes onCreateViewHolder(@NonNull ViewGroup viewGroup, final int i) {
        View view= LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_list,null,false);

        view.setOnClickListener(this);
        final ViewHolderReportes vHolder=new ViewHolderReportes(view);
        context=view.getContext();
        myDialog=new Dialog(context);
        myDialog.setContentView(R.layout.fragment_detalle_incidencia);
        vHolder.item_reportes.setOnClickListener(new View.OnClickListener() {

                public void onClick(View view) {

                TextView textSeccion=(TextView)myDialog.findViewById(R.id.idSeccionReporte);
                TextView textHora=(TextView)myDialog.findViewById(R.id.idFechaReporte);
                TextView textGrado=(TextView)myDialog.findViewById(R.id.idGradoReporte);
                TextView textTipo=(TextView)myDialog.findViewById(R.id.idTipoReporte);
                TextView textLugar=(TextView)myDialog.findViewById(R.id.idLugarReporte);
                TextView textDescripcion=(TextView)myDialog.findViewById(R.id.DescripcionIncidencia) ;
                TextView textAlumnos=(TextView)myDialog.findViewById(R.id.idNombreAlumnoReporte);
                textTipo.setText(listaincidencias.get(vHolder.getAdapterPosition()).getFalta());
                textSeccion.setText(listaincidencias.get(vHolder.getAdapterPosition()).getSeccion());
                textGrado.setText(listaincidencias.get(vHolder.getAdapterPosition()).getGrado());
                textHora.setText(listaincidencias.get(vHolder.getAdapterPosition()).getFechaCreacion());
                textAlumnos.setText(listaincidencias.get(vHolder.getAdapterPosition()).getAlumnosInvolucrados().toString());
                textLugar.setText(listaincidencias.get(vHolder.getAdapterPosition()).getLugar());
                textDescripcion.setText(listaincidencias.get(vHolder.getAdapterPosition()).getObservacion());
                myDialog.show();
                Window window = myDialog.getWindow();
                window.setLayout(Toolbar.LayoutParams.FILL_PARENT, ActionBar.LayoutParams.WRAP_CONTENT);

                Toast.makeText(context,"Text Click"+String.valueOf(vHolder.getAdapterPosition()),Toast.LENGTH_SHORT).show();
            }
        });
                 return vHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolderReportes holder, int i) {
        holder.Codigo.setText(String.valueOf(listaincidencias.get(i).getId()));
        holder.hora.setText(listaincidencias.get(i).getFechaCreacion());



    }

    @Override
    public int getItemCount() {

        return listaincidencias.size();

    }

    public void setOnClickListener(View.OnClickListener listener){
        this.listener=listener;

    }

    @Override
    public void onClick(View view) {
        if(listener!=null){
            listener.onClick(view);
        }

    }

    public class ViewHolderReportes extends RecyclerView.ViewHolder {
        private LinearLayout item_reportes;

        TextView Codigo,hora;
        public ViewHolderReportes(@NonNull View itemView) {

            super(itemView);
            item_reportes=(LinearLayout) itemView.findViewById(R.id.VistaReporte);
            hora=itemView.findViewById(R.id.idHoraIncidencia);
            Codigo=itemView.findViewById(R.id.idReporte);



        }


    }
}

Following 2 solutions shows how to achieve what you want.以下 2 个解决方案显示了如何实现您想要的。

Solution 1解决方案1

Use JspnPath and write expressions to retrieve the value of desired field.使用JspnPath并编写表达式来检索所需字段的值。

Maven Dependency Maven 依赖

<dependency>
    <groupId>com.jayway.jsonpath</groupId>
    <artifactId>json-path</artifactId>
    <version>2.4.0</version>
</dependency>

Code snippet代码片段

DocumentContext jsonContext = JsonPath.parse(jsonStr);
Object obj = jsonContext.read("$[0].alumnos_involucrados[1].nombre_alumno");
System.out.println(obj.toString()); //Alvaro

Solution 2解决方案2

Use JSON libraries such as Jackson to deserialize the response JSON string to POJOs.使用 JSON 库(例如Jackson将响应 JSON 字符串反序列化为 POJO。

Code snippet代码片段

@JsonIgnoreProperties(ignoreUnknown = true)
class MyResponse {
    @JsonProperty("alumnos_involucrados")
    List<AlumnosInvolucrado> alumnosInvolucrados;

    //general getters ans setters
}

@JsonIgnoreProperties(ignoreUnknown = true)
class AlumnosInvolucrado {
    @JsonProperty("nombre_alumno")
    private String nombreAlumno;

    //general getters and setters
}

ObjectMapper mapper = new ObjectMapper();
List<MyResponse> myResponse = mapper.readValue(jsonStr, new 
TypeReference<List<MyResponse>>(){});
System.out.println(myResponse.get(0).getAlumnosInvolucrados().get(1).getNombreAlumno()); //Alvaro

You can use a POJO class to get the data in Objects您可以使用 POJO 类来获取 Objects 中的数据

import java.util.List;

public class DataModel {

private List<Alumnos_involucrados> alumnos_involucrados;
private String seccion;
private String grado;
private String lugar;
private String falta;
private String profesor_apellido;
private String profesor_nombre;
private String observacion;
private String fecha_creacion;
private int id;

public List<Alumnos_involucrados> getAlumnos_involucrados() {
    return alumnos_involucrados;
}

public String getSeccion() {
    return seccion;
}

public String getGrado() {
    return grado;
}

public String getLugar() {
    return lugar;
}

public String getFalta() {
    return falta;
}

public String getProfesor_apellido() {
    return profesor_apellido;
}

public String getProfesor_nombre() {
    return profesor_nombre;
}

public String getObservacion() {
    return observacion;
}

public String getFecha_creacion() {
    return fecha_creacion;
}

public int getId() {
    return id;
}

public static class Alumnos_involucrados {
    private String ape_materno;
    private String ape_paterno;
    private String nombre_alumno;
    private int id_alumno;

    public String getApe_materno() {
        return ape_materno;
    }

    public String getApe_paterno() {
        return ape_paterno;
    }

    public String getNombre_alumno() {
        return nombre_alumno;
    }

    public int getId_alumno() {
        return id_alumno;
    }
 }
}

using this class you can get data from your API using Retrofit or your preferred library I will show example using retrofit使用这个类,您可以使用 Retrofit 或您首选的库从您的 API 获取数据我将展示使用改造的示例

here is the retrofit interface这是改造界面

@GET('api_link' //api link endPoint here)
Call<DataModel> getData(//pass parameters here);

get your data in enqueue as将您的数据放入enqueue

DataModel myData = response.body();
//you can get any field using this
String seccion = myData.getSeccion();
String ape_materno = myData.getAlumnos_involucrados().get(position).getApe_materno();
//use this in adapter or anywhere

Reference to learn Retrofit 学习Retrofit的参考

Hope this will help!希望这会有所帮助!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM