¿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?
- Enfoque eficiente para comprobar continuamente si la conexión a Internet está disponible en Android
- Función similar SwingUtilities.invokeLater en android?
- Error al buscar el estilo mapViewStyle
- ¿Cómo se rompió este código sincronizado?
- Gire VideoCapture en OpenCV en Android
- Android desventajas de no cerrar el cursor
- Cómo generar clase java simple de WSDL?
- Android pantalla completa una actividad y ocultar la barra de teclas
- Android-listo JAIN-SIP biblioteca?
- Android OS 6.0.1 Desplome nativo en /system/lib/libc.so
- Rendimiento de SQLite de Android en consultas complejas
- Android wifi p2p visibilidad de los compañeros
- Android: ¿Está onPause () garantizado para ser llamado después de finish ()?
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); ... }
- Demasiadas referencias de métodos en el proyecto de biblioteca de android – ClassNotFoundException
- Android, notificación Push mediante parse.com, inicia automáticamente la aplicación