MPAndroidChart + loopj

  • Respuestas:0
Oscar Elmejor
  • Posts del Foro: 1

12 jul. 2016 2:11:48 vía Web

Necesito usar los datos que he obtenido de mi servidor remoto (MySQL)usando loopj para crear un chart. He conseguido conectar y recibir en la activity los parámetros pero no se como traspasarlos a la gráfica (MPAndroidChart , gráfica lineal).

Esta es la gráfica. Necesito en el eje Y los datos de temperatura, y el el eje X los meses, en el eje X no hay problema, pero el problema lo tengo en el eje Y, pues en mi caso, cada día se crean 240 registros de temperatura. Una toma cada 3 minutos-

En OnCreate tengo este código:

String idObjeto = (String) getIntent().getExtras().getSerializable("IdentidadEnviada");

CaptarParametros(idObjeto);


LineChart lineChart = (LineChart) findViewById(R.id.chart);

ArrayList<Entry> entries = new ArrayList<>();

**aquí debería ir los datos de Y que no se como enfocarlo.

LineDataSet dataset = new LineDataSet(entries, "# of Calls");

ArrayList<String> labels = new ArrayList<String>();
labels.add("January");
labels.add("February");
labels.add("March");
labels.add("April");
labels.add("May");
labels.add("June");

LineData data = new LineData(labels, dataset);
dataset.setColors(ColorTemplate.COLORFUL_COLORS); //
dataset.setDrawCubic(true);
dataset.setDrawFilled(true);


lineChart.setData(data);
lineChart.animateY(5000);

La forma manual de hacerlo sería así: (3f, 8f, etc.. son los valores de "Y" y el valor siguiente es la posición en el Eje. Esto es así ya que la librería MPAndrodiChart así lo requiere.

entries.add(new Entry(4f, 0));
entries.add(new Entry(8f, 1));
entries.add(new Entry(6f, 2));
entries.add(new Entry(2f, 3));
entries.add(new Entry(18f, 4));
entries.add(new Entry(9f, 5));
entries.add(new Entry(9n+1f..., n+1...));
.....

Como son muchos registros, 240 cada día, no puedo hacerlo así, necesito automatizar este proceso pero adaptado a la libreería MPAndrodiChart.

Este es el Método que he creado y que contiene la conexión y la obtención de la temperatura de un sensor en concreto que tiene in ID (IdObjeto) concreto. Esto funciona bien. Pero ahora necesitaría que todos los datos de temperatura pudieran ser usados en orden en el eje Y de la gráfica.

private void CaptarParametros(String idObjeto) {

AsyncHttpClient client = new AsyncHttpClient();

RequestParams params = new RequestParams();
params.put(UtilitiesGlobal.SENSOR_ID, idObjeto);

RequestHandle post = client.post(this, SENSORS_URL, params, new JsonHttpResponseHandler() {
    @Override
    public void onStart() {
        // called before request is started
    }

    @TargetApi(Build.VERSION_CODES.KITKAT)
    @Override
    public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
        // called when response HTTP status is "200 OK"
        JSONObject jsonobject = null;
        JSONObject dht11JSONbject = null;
        JSONArray dht11JSONarray = null;


        try {

            jsonobject = new JSONObject(String.valueOf(response));
            //dht11JSONbject = jsonobject.getJSONObject("result");


            List<String> allNames = new ArrayList<String>();
            JSONArray cast = jsonobject.getJSONArray("result");
            for (int i = 0; i < cast.length(); i++) {
                JSONObject parametrosdht11 = cast.getJSONObject(i);
                String temperatura = parametrosdht11.getString("temperatura");
                String humedad = parametrosdht11.getString("humedad");
                allNames.add(temperatura);
                allNames.add(humedad);

                //Log.i(UtilitiesGlobal.TAG, "onSuccess: loopj " + usuarioiJSONbject);
                Log.i(UtilitiesGlobal.TAG, "onSuccess: loopj " + "temperatura: " + temperatura + " humedad: " + humedad);
            }

        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

Contestar