无法使用aChartEngine绘制折线图。我正在从SQLite数据库中读取(温度和时间,以毫秒为单位)

时间:2014-04-21 11:01:46

标签: android sqlite achartengine

我想使用aChartEngine绘制折线图。我正在从SQLite数据库中读取温度和时间。这些值正在存储并且也正在从DB中成功读取,但应显示图形的线性布局为空。善意的帮助。提前谢谢。

MainActivity.java

package com.database_trial;
import java.util.List;
import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.chart.PointStyle;
import org.achartengine.model.TimeSeries;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;
import trial.helper.DBHelper;
import trial.model.Temperature;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.util.Log;
import android.view.Menu;
import android.widget.LinearLayout;
public class MainActivity extends Activity {
    DBHelper db;
    private GraphicalView mChart;
     //arrays for x and y axis of graph


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);// deleting old data
        db = new DBHelper(getApplicationContext());
        Log.d("ans1", "fyn here");
        db.deleteTempReadings();
        // inserting data to temp table
        Log.i("insert", "Inserting Records...");
        db.insertTemperature(new Temperature("12.35"));
        db.insertTemperature(new Temperature("25.36"));
        db.insertTemperature(new Temperature("35.34"));
        // reading data from db
        Log.i("Reading", "Reading Records...");

        List<Temperature> temp = db.getAllTempReadings();

        int arraySize=temp.size();
        double tempArray[]=new double[arraySize];
        int timeArray[]=new int [arraySize];


        //Log.d("ans", String.valueOf(temp.size()));


        for (Temperature t : temp) {

            String log="SENSOR ID: "+t.getSensorId()+"TEMPERATURE: "+t.getTemperature()+"TIME: "+t.getTimestamp();
            Log.d("Record"+t, log);
        }
            // Reading values into the array!

            for(int i=0;i<arraySize;i++){

                tempArray[i]=Double.parseDouble(temp.get(i).getTemperature());

                timeArray[i]=Integer.parseInt(temp.get(i).getTimestamp());
                System.out.println("i: "+ tempArray[i]+" ,"+timeArray[i]);
        }
            TimeSeries series=new TimeSeries("Line1");

            for(int i=0;i<tempArray.length;i++){
                series.add(tempArray[i],timeArray[i]);
            }
            XYMultipleSeriesDataset dataset=new XYMultipleSeriesDataset();
            dataset.addSeries(series);

             //properties of line 
            XYSeriesRenderer renderer =new XYSeriesRenderer();
            renderer.setColor(Color.YELLOW);
            renderer.setPointStyle(PointStyle.DIAMOND);
            renderer.setFillPoints(true);

            XYMultipleSeriesRenderer mRenderer=new XYMultipleSeriesRenderer();

            mRenderer.addSeriesRenderer(renderer);
            mRenderer.setBackgroundColor(Color.BLACK);
            mRenderer.setChartTitle("TEMPERATURE LINE GRAPH");
            mRenderer.setAxesColor(Color.YELLOW);
            mRenderer.setApplyBackgroundColor(true);
            mRenderer.setXTitle("TEMPERATURE");
            mRenderer.setYTitle("TIME");
            mRenderer.setZoomButtonsVisible(true);
             for(int i=0;i<tempArray.length;i++)
                {
                 mRenderer.addXTextLabel(i, " :temp");

                }
             LinearLayout chart_container=(LinearLayout)findViewById(R.id.lineGraph);
             mChart = ChartFactory.getLineChartView(this, dataset,mRenderer);
             if(mChart==null){
                 Log.i("mChart: ", "null");
             }
             else{
                 Log.i("mChart: ", "not null but not displaying graph");
             }


        }



    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}

/ * DBHelper.java * /

package trial.helper;


    import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import trial.model.Temperature;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

    public class DBHelper extends SQLiteOpenHelper {
        private static final String DATABASE_NAME = "SensorDB";
        private static final int DATABASE_VERSION = 1;
        private static final String LOG = DBHelper.class.getName();

        // TABLE NAMES
        private static final String TEMPERATURE_TABLE = "temp_table";

        // temperature class
        private static final String KEY_SENSOR_ID = "sensor_id";
        private static final String KEY_TEMPERATURE = "temperature";
        private static final String KEY_TIMESTAMP = "timestamp";

        String CREATE_TEMP_TABLE = "CREATE TABLE " + TEMPERATURE_TABLE + "("
                + KEY_SENSOR_ID + " TEXT ," + KEY_TEMPERATURE + " REAL, "
                + KEY_TIMESTAMP + " TEXT DEFAULT CURRENT_TIMESTAMP )";

        public DBHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(CREATE_TEMP_TABLE);
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL("DROP TABLE IF EXISTS " + TEMPERATURE_TABLE);
            onCreate(db);
        }

        // CRUD OPERATIONS
        // --TEMPERATURETABLE--//

        // INSERT RECORD INTO TEMPERATURE TABLE
        public void insertTemperature(Temperature temp) {
            SQLiteDatabase db = this.getWritableDatabase();
            ContentValues values = new ContentValues();

            SimpleDateFormat dateFormat = new SimpleDateFormat(
                    "SSS", Locale.getDefault());
            Date date = new Date();

            values.put(KEY_SENSOR_ID, "MySensor");
            values.put(KEY_TEMPERATURE, temp.getTemperature());
            values.put(KEY_TIMESTAMP, dateFormat.format(date));

            try
            {
                db.insert(TEMPERATURE_TABLE, null, values);         
            }catch(Exception ex){
                Log.d("Exception in inserting data", ex.toString());
            }finally{
                db.close(); 
            }
        }

        // READ ALL RECORDS
        public List<Temperature> getAllTempReadings() {
            List<Temperature> temp = new ArrayList<Temperature>();
            SQLiteDatabase db = this.getReadableDatabase();
            String selectQuery = "SELECT * FROM " + TEMPERATURE_TABLE;

            Cursor c = db.rawQuery(selectQuery, null);
            if (c.moveToFirst()) {
                do {
                    Temperature t = new Temperature(); 
                    t.setSensorId(c.getString(0));
                    t.setTemperature(c.getString(1));
                    t.setTimestamp(c.getString(2));
                    temp.add(t);                
                } while (c.moveToNext());
            }

            return temp;
        }

        // DELETE All RECORDs
        public void deleteTempReadings() {
            SQLiteDatabase db = this.getWritableDatabase();
            String selectQuery = "Delete from " + TEMPERATURE_TABLE;
            db.execSQL(selectQuery);
            Log.d(LOG, selectQuery);
        }
}

/* **This is my model class for the database
Temperature.java** */

package trial.model;

import java.util.*;
import java.text.SimpleDateFormat;
import java.util.Locale;

public class Temperature {


        String sensor_id;
        String temperature;
        String timestamp;

        public Temperature() {

        }

        public Temperature(String temperature) {
            this.temperature = temperature;
        }

        public Temperature(String sensor_id, String temperature, String timestamp) {
            this.sensor_id = sensor_id;
            this.temperature = temperature;
            this.timestamp = timestamp;

        }

        // getters

        public String getSensorId() {
            return this.sensor_id;
        }

        public String getTemperature() {
            return this.temperature;
        }


        public String getTimestamp() {
            return this.timestamp;
        }

        // setters
        public void setSensorId(String sensor_id) {
            this.sensor_id = sensor_id;
        }

        public void setTemperature(String temperature) {
            this.temperature = temperature;
        }

        public void setTimestamp(String timestamp) {
            this.timestamp = timestamp;
        }

    }

// activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_marginRight="110dp"
        android:layout_marginTop="197dp"
        android:orientation="vertical" 
        android:id="@+id/lineGraph">
    </LinearLayout>

</RelativeLayout>

// logcat

04-21 06:48:19.974: D/dalvikvm(2386): Not late-enabling CheckJNI (already on)
04-21 06:48:21.545: D/ans1(2386): fyn here
04-21 06:48:21.833: D/trial.helper.DBHelper(2386): Delete from temp_table
04-21 06:48:21.864: I/insert(2386): Inserting Records...
04-21 06:48:22.023: I/Reading(2386): Reading Records...
04-21 06:48:22.054: D/Recordtrial.model.Temperature@41730cf8(2386): SENSOR ID: MySensor TEMPERATURE: 12.35 TIME: 967
04-21 06:48:22.054: D/Recordtrial.model.Temperature@41730e70(2386): SENSOR ID: MySensor TEMPERATURE: 25.36 TIME: 994
04-21 06:48:22.054: D/Recordtrial.model.Temperature@41730f50(2386): SENSOR ID: MySensor TEMPERATURE: 35.34 TIME: 022
04-21 06:48:22.063: I/System.out(2386): i: 12.35 ,967
04-21 06:48:22.063: I/System.out(2386): i: 25.36 ,994
04-21 06:48:22.063: I/System.out(2386): i: 35.34 ,22
04-21 06:48:22.554: D/dalvikvm(2386): GC_FOR_ALLOC freed 207K, 12% free 2810K/3176K, paused 39ms, total 45ms
04-21 06:48:22.623: I/mChart:(2386): not null but not displaying graph
04-21 06:48:22.943: D/gralloc_goldfish(2386): Emulator without GPU emulation detected.
04-21 06:48:23.053: I/ActivityManager(374): Displayed com.database_trial/.MainActivity: +3s220ms

1 个答案:

答案 0 :(得分:0)

查看此链接访问http://androidforbegineers.blogspot.in/2013/07/bar-chart-in-android-using-achartengine.html如果您未在Android清单中添加此行,请将其添加为活动

活动android:name =&#34; org.achartengine.GraphicalActivity&#34;

如果在主活动中添加一个按钮来生成图形(这是上面链接中遵循的方法),也会使用捆绑方法将数据从数据库传递到图表生成类({{3} })