Para crear una lista de elementos obtenidos de una llamada GET y mostrarlos, hay que seguir los siguientes pasos como muestro en el ejemplo.
Primero creamos un archivo XML para definir la vista con la lista. Para poder mostrar una lista, vamos a usar el elemento “ListView”.
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="match_parent"/> </RelativeLayout>
A continuación inicializamos el ListView y el Adapter e inicializamos
Inicializamos GetDataTask que extiende de AsyncTask para realizar una solicitud GET en segundo plano doInBackground que crea una conexión con la URL lee los datos de esa conexión y los almacenamos en una lista como ejemplo lo llamamos data.
Cuando la tarea en segundo plano está completa, llamamos a onPostExecute y recibimos los datos JSON.
Finalmente, agregamos al Adapter del ListView- Y para actualizar la vista usamos adapter.notifyDataSetChanged()
.
public class MainActivity extends AppCompatActivity { private ListView listView; private ArrayAdapter<String> adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = findViewById(R.id.listView); adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1); // Método para realizar la solicitud GET new GetDataTask().execute(); listView.setAdapter(adapter); } private class GetDataTask extends AsyncTask<Void, Void, List<String>> { @Override protected List<String> doInBackground(Void... voids) { // URL del endpoint correspondiente en tu servidor String apiUrl = "url_api"; List<String> data = new ArrayList<>(); try { URL url = new URL(apiUrl); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setRequestMethod("GET"); BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(urlConnection.getInputStream())); String line; while ((line = bufferedReader.readLine()) != null) { data.add(line); // Agregar los datos obtenidos } bufferedReader.close(); urlConnection.disconnect(); } catch (IOException e) { e.printStackTrace(); } return data; } @Override protected void onPostExecute(List<String> result) { super.onPostExecute(result); List<String> centerNames = new ArrayList<>(); try { for (String jsonData : result) { JSONArray jsonArray = new JSONArray(jsonData); for (int i = 0; i < jsonArray.length(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); String centerName = jsonObject.getString("name"); centerNames.add(centerName); } } } catch (JSONException e) { e.printStackTrace(); Log.e("JSON_PARSE_ERROR", "Error parsing JSON: " + e.getMessage()); // Log.e("JSON_PARSE_ERROR", "JSON Data: " + jsonData); } adapter.addAll(centerNames); adapter.notifyDataSetChanged(); } } }
Por último muestro el resultado de la lista en vista móvil.
Espero que les sirva de ayuda! Que tengan un feliz día.