2016-07-09 2 views
1

Y 축 (MPAndroidChart)에 변수 또는 동적 매개 변수를 소개하고 싶습니다. 매개 변수는 원격 서버에서 제공되며 센서에서 실시간으로 catch되는 "온도 및 습도"이므로 매개 변수를 수정하지 않은 다음 매개 변수를 Mysql에 할당하고 APP에서이 데이터를 가져온 후에 차트를 만듭니다.MPAndroidChart 삽입 Y 축 listArray 변수 또는 다이나믹 매개 변수

나는 그것을 만드는 방법에 대한 도움을 받고 싶습니다. 방법 loopj을 사용 CapatarParametros()에 PARAMS (습도와 온도)에 대한

은 서버와 데이터를 가져 오는에 연결 :

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

이 코드는 나에게 온도와 humedity을 줄이 같은 내 코드가 있습니다. 지금은 한 OnCreate에서 ("온도"exemple 당)이 매개 변수를 사용하고 y 축에 추가해야합니다

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

답변

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

두 가지 활동을 만듭니다. 하나는 차트 용이고 다른 하나는 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); 

} 

난 그냥 단순화하기 위해, 그것은 관련이없는 몇 가지 코드를했다.

+1

이 링크는 좋지 않으며 토론 중입니다. [여기] (http://chat.stackoverflow.com/transcript/message/32659609#32659609) –

+1

아무도 Stackoverflow에서 답변을 보냈습니다. 그래서 다른 사람들이 나에게 웹에서 해결책을 주었다. 그런 다음 다른 사람들이 저와 같은 문제가있을 때 그것을 취할 수 있도록 그것을 썼습니다. 그러나 그것은 내 자신의 해결책이 아니었기 때문에 제 3면에서 나왔습니다. 해결책을 준 사람들의 이름과 링크를 썼습니다. 시스템이이 상황을 해결할 다른 방법이 없기 때문에 이것은 "교육받는"것으로 알려져 있으며 스팸이 아닙니다. –

+0

저에게 답장을 보내 주셔서 감사합니다. 링크없이 저자를 인정할 수 있습니다. –