2016-07-09 4 views
1

Ich möchte Variable oder Dynamic Parameter in Y-Achse (MPAndroidChart) einzuführen. Die Parameter kommen von Remote-Server, und sie sind keine festen Parameter, da sie "Temperatur und Luftfeuchtigkeit" von einem Sensor in Echtzeit erfasst werden, dann ist es in Mysql zugeordnet und von meiner APP ein Diagramm nach dem Abrufen dieser Daten.MPAndroidChart Y-Achsenliste einfügenArray Variable oder Dynamic Parameter

Ich hätte gerne Hilfe, wie man es macht. Ich habe meinen Code wie folgt aus:

Für params (Feuchte und Temperatur) in Verfahren CapatarParametros() loopj mit dem Server zu verbinden und die Daten zu erhalten:

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); 

Dieser Code gibt mir Temperatur und humedity. Jetzt muss ich diese Parameter zu übernehmen und auf der y-Achse (pro exemple "Temperatur") in onCreate hinzufügen:

LineChart lineChart = (LineChart) findViewById(R.id.chart); 
ArrayList<Entry> entries = new ArrayList<>(); 

Antwort

1
public class DatosSensor extends AppCompatActivity { 

    private DrawerLayout drawerLayout; 

    private static final String SENSORS_URL = "http://....."; 

    // Progress Dialog Object 
    ProgressDialog prgDialog; 
    // Error Msg TextView Object 
    TextView errorMsg; 
    // Email Edit View Object 

    private String temeperatura; 

    ArrayList<Entry> temperature = new ArrayList<>(); 
    ArrayList<Entry> yVals2 = new ArrayList<>(); 

    LineChart mChart; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.actividad_datos_sensor); 
     String idObjeto = (String) getIntent().getExtras().getSerializable("IdentidadEnviada"); 

     CaptarParametros(idObjeto); 

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

     // no description text 
     mChart.setDescription(""); 
     mChart.setNoDataTextDescription("You need to provide data for the chart."); 

     // enable touch gestures 
     mChart.setTouchEnabled(true); 

     mChart.setDragDecelerationFrictionCoef(0.9f); 

     // enable scaling and dragging 
     mChart.setDragEnabled(true); 
     mChart.setScaleEnabled(true); 
     mChart.setDrawGridBackground(false); 
     mChart.setHighlightPerDragEnabled(true); 

     // if disabled, scaling can be done on x- and y-axis separately 
     mChart.setPinchZoom(true); 

     // set an alternative background color 
     mChart.setBackgroundColor(Color.LTGRAY); 

     mChart.animateX(2500); 

     XAxis xAxis = mChart.getXAxis(); 
     xAxis.setTextSize(11f); 
     xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); 
     xAxis.setAxisMaxValue(100f); 
     xAxis.setAxisMinValue(0f); 
     xAxis.setTextColor(Color.WHITE); 
     xAxis.setDrawGridLines(false); 
     xAxis.setDrawAxisLine(false); 

     //modify leftYaxis range similarly others 
     YAxis leftAxis = mChart.getAxisLeft(); 
     leftAxis.setTextColor(ColorTemplate.getHoloBlue()); 
     leftAxis.setAxisMaxValue(100f); 
     leftAxis.setAxisMinValue(0f); 
     leftAxis.setDrawGridLines(false); 
     leftAxis.setGranularityEnabled(true); 


     YAxis rightAxis = mChart.getAxisRight(); 
     rightAxis.setTextColor(Color.RED); 
     rightAxis.setAxisMaxValue(100f); 
     rightAxis.setAxisMinValue(0f); 
     rightAxis.setDrawGridLines(false); 
     rightAxis.setDrawZeroLine(false); 
     rightAxis.setGranularityEnabled(false); 


     // add data 
     setData(); 
    } 


    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 
      } 

      @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"); 
         temperature.add(new Entry(Float.valueOf(i),Float.valueOf(temperatura))); 
         yVals2.add(new Entry(Float.valueOf(i),Float.valueOf(humedad))); 

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

    private void setData() { 
//data set represents a lin 
     LineDataSet set1, set2; 

     // create a dataset and give it a type 
     //modifications with colour and stuf 
     set1 = new LineDataSet(temperature, "Temperatur"); 
     set1.setAxisDependency(YAxis.AxisDependency.LEFT); 
     set1.setColor(ColorTemplate.getHoloBlue()); 
     set1.setCircleColor(Color.WHITE); 
     set1.setLineWidth(2f); 
     set1.setCircleRadius(3f); 
     set1.setFillAlpha(65); 
     set1.setFillColor(ColorTemplate.getHoloBlue()); 
     set1.setHighLightColor(Color.rgb(244, 117, 117)); 
     set1.setDrawCircleHole(false); 


     // similar above 
     set2 = new LineDataSet(yVals2, "Humidity"); 
     set2.setAxisDependency(YAxis.AxisDependency.RIGHT); 
     set2.setColor(Color.RED); 
     set2.setCircleColor(Color.WHITE); 
     set2.setLineWidth(2f); 
     set2.setCircleRadius(1f); 
     set2.setFillAlpha(65); 
     set2.setFillColor(Color.RED); 
     set2.setDrawCircleHole(false); 
     set2.setHighLightColor(Color.rgb(244, 117, 117)); 
     //set2.setFillFormatter(new MyFillFormatter(900f)); 

     ArrayList<ILineDataSet> dataSets = new ArrayList<ILineDataSet>(); 
     dataSets.add(set1); // add the datasets 
     dataSets.add(set2); 

     // create a data object with the datasets 
     LineData data = new LineData(dataSets); 
     data.setValueTextColor(Color.WHITE); 
     data.setValueTextSize(9f); 

     // set data 
     Log.i("Lists Sizedata",temperature.size() + " and " + yVals2.size()); 
     mChart.setData(data); 
    } 
} 

zwei Aktivitäten erstellen. Eine für Chart, eine andere Schnittstelle für Asyncronics. DataSensor.java

public class DatosSensor extends AppCompatActivity implements onLoopjTaskFinished { 

    private onLoopjTaskFinished loopjListener; 

    private DrawerLayout drawerLayout; 

    ProgressDialog prgDialog; 
    TextView errorMsg; 
    private String temeperatura; 

    ArrayList<Entry> entries; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.actividad_datos_sensor); 

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

     CaptarParametros(idObjeto); 

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

     entries = new ArrayList<>(); 
     //entries.add(new Entry(60f, 0)); 
     //entries.add(new Entry(6f, 1)); 
     //entries.add(new Entry(6f, 2)); 
     //entries.add(new Entry(2f, 3)); 
     //entries.add(new Entry(18f, 4)); 
     //entries.add(new Entry(60f, 5)); 

     Log.i(UtilitiesGlobal.TAG, "onCreate: entries size = " + entries.size()); 

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

     ArrayList<String> labels = new ArrayList<String>(); 


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


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


     //Toast.makeText(getApplicationContext(), idObjeto, Toast.LENGTH_LONG).show(); 

     agregarToolbar(); 

    @Override 
    public void onLoopjFinishedSuccess(JSONObject jsonObject) { 
     List<String> allNames = new ArrayList<String>(); 
     JSONArray cast = null; 
     try { 
      cast = jsonObject.getJSONArray("result"); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     for (int i = 0; i < cast.length(); i++) { 
      JSONObject parametrosdht11 = null; 
      String temperatura = null; 
      String humedad = null; 
      try { 
       parametrosdht11 = cast.getJSONObject(i); 
       temperatura = parametrosdht11.getString("temperatura"); 
       humedad = parametrosdht11.getString("humedad"); 
       allNames.add(temperatura); 
       allNames.add(humedad); 

       float tempFloat = Float.parseFloat(temperatura); 
       entries.add(new Entry(tempFloat, i)); 

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

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

Interface (onLoopjTaskFinished) 

    public interface onLoopjTaskFinished { 
    void onLoopjFinishedSuccess(JSONObject jsonObject); 
    void onLoopjFinishedFailure(int statusCode); 

} 

Ich habe einige Code aus, dass es nicht relevant ist, nur zu vereinfachen.

+1

Diese Links sind nicht gut und im Gespräch [hier] (http://chat.stackoverflow.com/transcript/message/32659609#32659609) –

+1

Niemand in Stackoverflow schickte eine Antwort. also gaben mir noch ein paar Leute eine Lösung aus dem Internet. Dann schrieb ich es, damit andere Leute es nehmen konnten, wenn sie dasselbe Problem hatten wie ich, aber weil es nicht meine eigene Lösung war, sondern von dritten Seiten, schrieb ich den Link und den Namen von Leuten, die mir die Lösung gaben. Dies wird als "gebildet" und nicht als Spam bezeichnet, da das System keine andere Möglichkeit hat, diese Situation zu lösen. –

+0

Vielen Dank für Ihre Antwort, Sie können die Autoren ohne die Links bestätigen. –