¿Cuál es una forma adecuada de obtener los valores de un JSON Volley requset?

Tengo una solicitud de JSON que se parece a esto:

JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, (String) null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { roomArray = parseRoomsResponse(response); callback.onSuccess(roomArray); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } } 

Esta solicitud está dentro del método onCreateView() , y mi método parseRoomsResponse() me devuelve un ArrayList que deseo trabajar con onCreateView() , así que ¿cuál es la forma correcta de hacer esto?

Sé que está bien, debo manejar everithing dentro de la clase interna onSuccess, ¿hay alguna manera de obtener valores para onCreateView? – Zoltan Kurtyak

Ahh … Ya veo tu problema ahora.

El problema aquí es que una solicitud tarda una cantidad desconocida de tiempo para devolver una respuesta, por lo que Volley hace estas solicitudes de forma asíncrona para usted en lugar de bloquear su subproceso de interfaz de usuario.
Así que si haces una Solicitud en onCreateView , es poco probable que onCreateView en onCreateView cuando onCreateView la respuesta.

Puede que tenga que replantearse el flujo de su código. Si la vista de su fragmento depende de la respuesta de una solicitud, entonces probablemente debería asegurarse de hacer la solicitud y obtener la respuesta antes de crear la vista de su fragmento.


Un acercamiento típico a este problema es apenas uso los valores del sostenedor del lugar hasta que se reciba la respuesta. Por ejemplo:

 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_layout, container, false); ... EditText myEditText = (EditText) rootView.findViewById(R.id.response_dependent_edittext); myEditText.setText("Loading Data"); ImageView myImageView = (ImageView) rootView.findViewById(R.id.response_dependent_imageview); myImageView.setImageResource(R.drawable.image_placeholder); ... return rootView; } 

A continuación, puede crear un método updateViews;

 private void updateViews(ArrayList<MyArrayType> myParsedArray) { // Extract relevant data from the array ... // Replace the place holders in the relevant views EditText myEditText = (EditText) getView().findViewById(R.id.response_dependent_edittext); myEditText.setText(stringFromParsedArray); ImageView myImageView = (ImageView) getView().findViewById(R.id.response_dependent_imageview); myImageView.setImageDrawable(drawableFromParsedArray); } 

Y onResponse método onResponse de su solicitud:

 @Override public void onResponse(JSONObject response) { myParsedArray = parseResponse(response); updateViews(myParsedResponse); ... } 
  • Cómo importar la biblioteca ZXING en la aplicación Android?
  • Cambiar el ancho y la altura de la vista personalizada en Android
  • ¿Cómo hacer un temporizador simple sin nueva clase en Android?
  • Animación de elementos de Android ui
  • ¿Cómo implementas una a muchas relaciones en Clean Architecture
  • Archivos de expansión Apk - Licencias de aplicaciones - Cuenta de desarrollador - respuesta NOT_LICENSED
  • Configuración de la transparencia alfa en un listView android
  • Android: OnClickListener no responde en carga inicial?
  • Mover el cursor de forma más suave (aplicación remota)
  • Android getIntent (). GetExtras () devuelve null
  • Cómo agregar una clase personalizada que extiende la vista a la actividad principal?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.