Используйте getter / setter для сохранения / доступа к переменным, извлеченным из JSON в Android с помощью Volley - PullRequest
0 голосов
/ 24 августа 2018

Мне нужно извлечь данные из JSON, переменная idVideo сохраняется в сеттере из класса Video, затем у меня есть другой метод для доступа с помощью getter, но значение всегда null.

Код из метода извлечения данных JSON:

    public void sacarJsonInfoVideo(String url){

    RequestQueue request = Volley.newRequestQueue(this);
    JsonObjectRequest jsonObjectRequest=new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {

            try {
                JSONObject jsonObject = new JSONObject(response.toString(0));

                JSONArray jsonArray=jsonObject.getJSONArray("items");

                for(int i=0; i<jsonArray.length(); i++){
                    String idVideo=jsonArray.getJSONObject(i).getJSONObject("id").getString("videoId");
                    video.setIdVideo(idVideo);

                    String tituloVideo=jsonArray.getJSONObject(i).getJSONObject("snippet").getString("title");
                    video.setTitulo(tituloVideo);

                    String fechaSubida=jsonArray.getJSONObject(i).getJSONObject("snippet").getString("publishedAt");
                    String SfechaSubida=fechaSubida.substring(0, 10);
                    video.setDiaSubida(SfechaSubida);

                    String nombreCanal=jsonArray.getJSONObject(i).getJSONObject("snippet").getString("channelTitle");
                    video.setNombreCanal(nombreCanal);

                    String miniatura=jsonArray.getJSONObject(i).getJSONObject("snippet").getJSONObject("thumbnails").getJSONObject("default").getString("url");
                    video.setMiniatura(miniatura);


                    listVideo.add(video);
                }

                String idVideos =listVideo.get(0).getIdVideo();
                System.out.println("Id a reproducir(sacarJsonInfoVideo): "+ idVideos);

                tvNombreVideo.setText(listVideo.get(0).getTitulo());
                tvNombreCanal.setText(listVideo.get(0).getNombreCanal());
                tvFechaSubida.setText(listVideo.get(0).getDiaSubida());

            } catch (JSONException e) {
                siguienteVideo(v);
                Toast.makeText(getApplicationContext(), "Holi", Toast.LENGTH_LONG).show();
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {

        }
    });

    request.add(jsonObjectRequest);
}

Получатель сохраняется в переменной с именем sdw, всегда равен null: (

public void siguienteVideo(View v) {
    String idVideo = obtenerRandomIdVideo();
    System.out.println("Id URL(siguienteVideo): "+idVideo);

    String urlBuscarVideo = "https://www.googleapis.com/youtube/v3/search?part=id,snippet&maxResults=5&type=video&q="+idVideo+"&key="+claveYT;

    sacarJsonInfoVideo(urlBuscarVideo);

    String sdw=video.getIdVideo();

    System.out.println("Video que se va a reproducir YA: "+sdw);
}

При отладкеу меня есть консоль

I/System.out: String a buscar(obtenerRandomIdVideo): 5mey1
      Id URL(siguienteVideo): 5mey1
I/System.out: Video que se va a reproducir YA: null
I/System.out: Id a reproducir(sacarJsonInfoVideo): 3FTkUWUc7es

Это похоже на метод, выполняемый позже, чем System.out.println().

Извините за мой плохой английский, я пришел из stackoverflow на испанском и у меня нетхороший ответ.

...