GraphView Uhrzeit als x-Achse

  • Antworten:1
basti38
  • Forum-Beiträge: 45

08.06.2017, 15:16:34 via Website

Hi,
ich habe eine Problem mit der GraphView. Ich lade aus einer SQL-Datenbank Werte. Einen int-wert für die y-Achse und einen String für die Uhrzeit als HH:mm:ss.SSS. Wenn ich nun den String in ein Date-Objekt umwandle und mir in der x-Achse anzeigen lasse, bekomme ich immer den 01.01.70. Ich will eben kein Datum, sondern nur die Uhrzeit.

Hat jemand eine Idee wie ich das ändern kann?

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_messung);

    Button button_restart_activity = (Button) findViewById(R.id.button_refresh);
    button_restart_activity.setOnClickListener(this);

    graph = (GraphView) findViewById(R.id.graph);

    series.setDrawDataPoints(true);
    /*
    series = new LineGraphSeries<>(new DataPoint[] {
            new DataPoint(0, 0)
    });
       */

    // set manual X bounds
    graph.getViewport().setYAxisBoundsManual(true);
    graph.getViewport().setMinY(0);
    graph.getViewport().setMaxY(1500);

    timeNow = Calendar.getInstance();
    //format.format(timeNow.getTime());

    graph.getViewport().setXAxisBoundsManual(true);
    graph.getViewport().setMinX(0);
    graph.getViewport().setMaxX(0.1);

    // enable scaling and scrolling
    graph.getViewport().setScalable(true);
    graph.getViewport().setScalableY(true);

    graph.getViewport().setScrollable(true);
    graph.getViewport().setScrollableY(true);

    //graph.getGridLabelRenderer().setHorizontalAxisTitle("Zeit");
    graph.getGridLabelRenderer().setVerticalAxisTitle("Paketlänge");

    graph.getLegendRenderer().setVisible(true);
    graph.getLegendRenderer().setWidth(375);
    graph.getLegendRenderer().setMargin(60);

    graph.getLegendRenderer().setAlign(LegendRenderer.LegendAlign.TOP);
    // set date label formatter
    graph.getGridLabelRenderer().setLabelFormatter(new DateAsXAxisLabelFormatter(getApplicationContext()));
    graph.getGridLabelRenderer().setNumHorizontalLabels(3); // only 4 because of the space

    graph.getGridLabelRenderer().setHumanRounding(false);





    Timer t1 = new Timer();

    t1.schedule(new TimerTask() {

            @Override
            public void run() {
                getData();
                               }

        }, 0, 1500); //alle 1,5 Sekunden...

}


protected void addPoints() {
    try {
        JSONObject jsonObj = new JSONObject(myJSON);
        werte = jsonObj.getJSONArray(TAG_RESULTS);

        //Gibt Resourcen frei
        graph.removeSeries(series);

        for (int i = 0; i < werte.length(); i++) {
            JSONObject c = werte.getJSONObject(i);

            int id = c.getInt(TAG_ID);
            String zeit = c.getString(TAG_ZEIT);
            String typ = c.getString(TAG_TYP);
            int laenge = c.getInt(TAG_LAENGE);

            try {
                xIntRaw.setTime(format.parse(zeit));// all done
            }catch(ParseException e){
                e.printStackTrace();
            }
            //long xInt = ((xIntRaw.getTimeInMillis()/10)-(timeNow.getTimeInMillis()/10));

            Date xInt = xIntRaw.getTime();






            int yInt = laenge;

            points.add(new DataPoint(xInt,yInt));

        }

            dbPoint = points.toArray(new DataPoint[points.size()]);

            series = new LineGraphSeries<>(dbPoint);

            graph.addSeries(series);

            series.setTitle("Paketlänge/Zeit");

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

}


public void getData() {
    class GetDataJSON extends AsyncTask<String, Void, String> {

        @Override
        protected String doInBackground(String... params) {
            DefaultHttpClient httpclient = new DefaultHttpClient(new BasicHttpParams());
            //HttpPost httppost = new HttpPost("http://10.10.0.1/getter.php");
            HttpPost httppost = new HttpPost("http://s466958426.online.de/basti/getter1.php");

            // Depends on your web service
            httppost.setHeader("Content-type", "application/json");

            InputStream inputStream = null;
            String result = null;
            try {
                HttpResponse response = httpclient.execute(httppost);
                HttpEntity entity = response.getEntity();

                inputStream = entity.getContent();
                // json is UTF-8 by default
                BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8);
                StringBuilder sb = new StringBuilder();

                String line = null;
                while ((line = reader.readLine()) != null) {
                    sb.append(line + "\n");
                }
                result = sb.toString();
            } catch (Exception e) {
                // Oops
            } finally {
                try {
                    if (inputStream != null) inputStream.close();
                } catch (Exception squish) {
                }
            }
            return result;
        }

        @Override
        protected void onPostExecute(String result) {
            myJSON = result;
            addPoints();
        }
    }
    GetDataJSON g = new GetDataJSON();
    g.execute();
}

Viele Grüße Basti

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

08.06.2017, 20:38:40 via Website

Ich hab jetzt mit der Lib selber noch nciht gearbeitet, aber laut Doc (hast du dir die mal angeschaut?)
gibts einen DateXFormatter mit dem du genau das erreichen kannst:
Example:
http://www.javatips.net/api/GraphView-master/src/main/java/com/jjoe64/graphview/helper/DateAsXAxisLabelFormatter.java
Doc: http://www.android-graphview.org/dates-as-labels/

LG Pascal //It's not a bug, it's a feature. :) ;)

swa00

Antworten