2016-07-09 6 views
1

Y軸(MPAndroidChart)に変数またはダイナミクスパラメータを導入したいと考えています。パラメータはリモートサーバから来ており、リアルタイムでセンサからキャッチされた「温度と湿度」であるため、パラメータを修正することはできません。このデータを取得した後、Mysqlと私のAPPから割り当てられます。MPAndroidChart Y軸listArray変数またはダイナミックパラメータの挿入

私はどのようにそれを作るための助けをしたいと思います。

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を与える:サーバーに接続するためにloopjを使用してデータを取得する方法 CapatarParametros()でのparams(湿度と温度)については

:私はこのような私のコードを持っています。今私は、これらのパラメータを取り、y軸(exempleあたりの「温度」)に追加のonCreateにする必要があります。

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

2つのアクティビティを作成します。 1つはChart用、もう1つは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で答えを送りました。他のトウの人々が私にウェブからの解決策を与えました。それから、私のような同じ問題があったときに他の人がそれを取ることができるように私はそれを書いたが、それは私自身の解決策ではなかったが、それは第三者からのものだったから、私は解決策を与えた人のリンクと名前を書いた。これは、システムがこの状況を解決するための別の方法を持っていないため、「教育を受けている」といい、スパムではありません。 –

+0

私に返信していただきありがとうございます、あなたはリンクなしで著者を認めていただけます。 –

関連する問題