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

标签 java android arrays json retrofit2

您好,您能帮我解决 5 天前遇到的问题吗? 我得到了涉及的所有 json 集合,但仅限于 json 格式,但我只想获取一些属性,例如 json_array alumnos_involucrados 集合的 nombre_alumnos

Mi 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"
                }
            ]
        }
    ]

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

适配器回收器 View

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



        }


    }
}
<小时/>

最佳答案

以下 2 个解决方案展示了如何实现您想要的目标。

解决方案1

使用JspnPath并编写表达式来检索所需字段的值。

Maven 依赖

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

代码 fragment

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

解决方案2

使用 JSON 库(例如 Jackson)将响应 JSON 字符串反序列化为 POJO。

代码 fragment

@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

关于java - 在 recyclerview 中访问 JSON 数组中的项目成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59238923/

相关文章:

java - actionPerformed 执行后会发生什么?

java - 如何向上转换 Java 8 Optional 中包含的对象?

javascript - 如何将 DOM 元素设置为第一个子元素?

java - 将 Redis ByteString 转换为 BasicDBObject

java - float 型最多可容纳38个数字,双型最多可容纳300个数字。这些神奇的数字从何而来?

android - TextView 是否缩放其字体大小以填充父级?

android - 从 TravisCI 将 Android aar 库上传到 bintray

java - 检查字符串是否为空不起作用

c - 'Empty' C 数组的解释(int a = {};)

javascript - 如何对 2d for 循环进行排序并将结果输入斜边公式