Android - Pasar datos a una clase no activity

 
Vista:
Imágen de perfil de Violeta
Val: 36
Ha disminuido 1 puesto en Android (en relación al último mes)
Gráfica de Android

Pasar datos a una clase no activity

Publicado por Violeta (22 intervenciones) el 02/12/2020 12:20:17
Hola.

No sé si esto puede hacerse:

Tengo por un lado un método en la MainActivity que manda una consulta Json, recoge los valores y los vuelca a una clase con Gson.

Después tengo una clase WorkManager que utiliza esos mismos datos para mandar notificaciones según su comportamiento.

El método lo necesito en la Main porque luego pasa datos también a otra activity.

Os dejo el código:

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
public void connectData(){
 
    AsyncTask.execute(new Runnable() {
        @Override
        public void run() {
 
            try {
 
                StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
                StrictMode.setThreadPolicy(policy);
 
                //Creamos URL
                URL uriData = new URL("http://92.222.208.150/get_datataker_data");
 
                // Creamos conexión
                HttpURLConnection myConnection =
                        (HttpURLConnection) uriData.openConnection();
 
                //Hay que restar 2 minutos a la fecha actual, ya que los valores se
                // vuelcan cada 2 minutos
 
                fecha1.add(Calendar.MINUTE, -5);
                String fecha2=String.format("%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS", fecha1);
 
                //mitexto.setText(fecha);
 
                //Parámetros para la cabecera
                List<NameValuePair> params = new ArrayList<NameValuePair>();
                params.add(new BasicNameValuePair("user","violeta"));
                params.add(new BasicNameValuePair("pass","eyJ0eX"));
                params.add(new BasicNameValuePair("date_from","2020-12-01 00:00:00"));
                params.add(new BasicNameValuePair("date_to",fecha));
 
                myConnection.setReadTimeout(15000 /* milliseconds */);
                myConnection.setConnectTimeout(15000 /* milliseconds */);
                myConnection.setRequestMethod("POST");// se puede cambiar por delete ,put ,etc
                myConnection.setDoInput(true);
                myConnection.setDoOutput(true);
 
                //Escribimos los parámetros de la conexión
                OutputStream os = myConnection.getOutputStream();
                BufferedWriter writer = new BufferedWriter(
                        new OutputStreamWriter(os, "UTF-8"));
                writer.write(getQuery(params));
                writer.flush();
                writer.close();
                os.close();
 
                myConnection.connect();
 
                int resCode=myConnection.getResponseCode();
 
                //Si se establece bien la conexión, tiene que devolver el dódigo 200
                if (resCode == 200) {
 
                    //Leemos el JSon devuelto
                    InputStream responseBody = myConnection.getInputStream();
                    InputStreamReader responseBodyReader =
                            new InputStreamReader(responseBody, "UTF-8");
 
                    StringWriter stringWriter = new StringWriter();
                    IOUtils.copy(responseBodyReader, stringWriter);
                    String theString = stringWriter.toString();
                    JSONArray jArray = new JSONArray(theString);
 
                    //Recorremos el array devuelto y utilizamos la clase Gson para asignar los objetos
                    //a nuestra clase
                    for(int i=0; i<jArray.length(); i++){
                        JSONObject json_data = jArray.getJSONObject(i);
 
                        Datataker aux= new Gson().fromJson(json_data.toString(),Datataker.class);
 
                        listData.add(aux);
                    }
 
                    //mitexto.setText(""+v1);
 
                } else {
                    Log.i("log_tag", "Failed");
                }
 
                myConnection.disconnect();
 
            }catch (MalformedURLException e){
                System.err.println("uri mal formulada");
            }catch (IOException e){
                e.printStackTrace();
                System.err.println("Excepción al abrir la conexión");
            }catch (Exception e){
                System.err.println("Excepción: "+e);
            }
 
        }
 
    });
}

listData es un ArrayLIst de la clase Datataker.

Lo que he visto por internet solo habla de pasar datos entre activitys, pero para clases normales no creo que funcione, además no responde a ningún evento (por ejemplo para la otra avtivity sí utilizo un onClick())

De momento lo estoy haciendo repitiendo la consulta en el WorkManager, pero no es lo ideal (y seguro me baja nota...).

Otra idea es llevarme el método a una clase aparte, pero no tengo claro cómo recoger después los datos en la MainActivity y en el WorkManager.

¿Alguna idea?
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