Android - Como guardar el contenido de una consulta get de retrofit y usarla en una actividad

 
Vista:

Como guardar el contenido de una consulta get de retrofit y usarla en una actividad

Publicado por Miquel (1 intervención) el 26/11/2019 13:38:16
Estoy usando la libreria de Retrofit para hace una consulta GET. El problema es debido a que me gustaría hacer un Manager para que se encargue de dicha consulta y guarde el resultado obtenido para que en un futuro puedan acceder todas las actividades de forma más rapida, ya que solo accederían a la variable que ha guardado el resultado.

Tengo dos classes involucradas, la primera de ellas es el Manager que se encarga de realizar la consulta:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public class ManagerClientServiciosApi {
 
    private Retrofit retrofit;
    private List<Servicio> cacheServicios;
 
    public ManagerClientServiciosApi() {
 
    }
 
    public Call<List<Servicio>> setUpRetrofit() {
        retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
 
        ClientServicio clientServicio = retrofit.create(ClientServicio.class);
        return clientServicio.getServicios();
    }
 
    public void fetchServicios() {
        Call<List<Servicio>> call = this.setUpRetrofit();
        try {
            fillServicios(call.execute().body());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
    public List<Servicio> cache() {
        fetchServicios();
        return this.cacheServicios;
    }
 
    private void fillServicios(List<Servicio> temp) {
        if (this.cacheServicios != null) {
            this.cacheServicios.clear();
        }
        this.cacheServicios = temp;
    }

y la actividad que llamaria a dicho manager:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class MainActivity extends AppCompatActivity {
 
    private ManagerClientServiciosApi manager;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        manager = new ManagerClientServiciosApi();
        makeApiCall();
    }
 
    private void makeApiCall() {
        List<Servicio> servicios = manager.cache();
        for (Servicio services : servicios) {
            System.out.println(services.getNombre());
            System.out.println("Ruta id: " + services.getRuta().getId());
            System.out.println("Nombre ruta: " + services.getRuta().getNombre());
            List<Parada> list = services.getRuta().getParadas();
            for (Parada item : list) {
                System.out.printf("ID - %d, Nombre - %s, Ruta - %d%n", item.getId(),
                        item.getNombre(), item.getRuta());
            }
            System.out.println("Expediciones: " + services.getExpediciones());
        }
    }
}

Pero al realizar esto salta un error android.os.NetworkOnMainThreadException.
Estoy realizando correctamente lo que he descrito, y si no es asi como puedo arreglarlo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder