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:
y la actividad que llamaria a dicho manager:
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.
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


0