2013-07-23 2 views
1

Я хочу создать граф на основе данных в столбце базы данных SQLite. Я установил achartengine.jar, и я также знаю, как генерировать граф по жестко закодированным значениям в массиве. Но я не могу понять, как это сделать с данными Sqlite. Может ли кто-нибудь помочь мне со ссылками на учебники о том, как достичь этого или, может быть, помочь мне преобразовать столбец базы данных в массив, который я мог бы использовать.Построение графика на основе столбца базы данных SQLite

Спасибо за помощь!

public class ReportGraph extends GraphicalActivity 
{ 

    double[] fQty; 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     getIntent(); 

    } 

    public Intent getIntent(Context context) 
    { 

     FuelStoredInfo reportInfo =new FuelStoredInfo(this); 
     reportInfo.open(); 
     fQty=reportInfo.getReportData(this); 
     reportInfo.close(); 



     CategorySeries series = new CategorySeries("Reports"); 
     for(int i = 0; i< fQty.length; i++) 
     { 
      series.add("Report"+(i+1), fQty[i]); 

     } 



     XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset(); 
     dataset.addSeries(series.toXYSeries()); 
     //dataset.addSeries(series1.toXYSeries()); 

     //customize bar 1 
     XYSeriesRenderer renderer = new XYSeriesRenderer(); 
     renderer.setDisplayChartValues(true); 
     renderer.setChartValuesSpacing((float)0.5); 
     renderer.setColor(Color.BLUE); 




     XYMultipleSeriesRenderer rRenderer = new XYMultipleSeriesRenderer(); 
     rRenderer.addSeriesRenderer(renderer); 
     rRenderer.setChartTitle("Reports"); 
     rRenderer.setXTitle("Date"); 
     rRenderer.setYTitle("Prices"); 


     Intent i =ChartFactory.getBarChartIntent(context, dataset, rRenderer, Type.DEFAULT); 

    return i; 

    } 


    public double[] getfQty() { 
     return fQty; 
    } 

    public void setfQty(double[] fQty) { 
     this.fQty = fQty; 



} 

FuelStoredInfo.java (база данных) Журнал

public FuelStoredInfo open() throws SQLiteException 
    { 
     OpenDBHelper ourHelper = new openDBHelper(ourContext); 
       SQLiteDatabase ourDatabase = ourHelper.getWritableDatabase(); 
     return this; 

    } 

    public double[] getReportData(ReportGraph reportGraph) 
     { 
      // TODO Auto-generated method stub 
      String [] columns = new String[]{KEY_ROW_ID, KEY_KM, KEY_FUEL_QTY, KEY_FUEL_PRICE, KEY_TOTAL_COST, KEY_MILEAGE, KEY_DATE,KEY_TANK_FULL}; 

      double[] reportList ; 
       int i = 0; 

       String selectQuery = "SELECT * FROM fuel_table"; 

       reportCursor = ourDatabase.rawQuery(selectQuery, null); 
       int count = reportCursor.getCount(); 
       reportList = new double[count]; 

       if (reportCursor.moveToFirst()) 
       { 
        do { 
         reportList[i] = reportCursor.getDouble(2); 
         i++; 

         } while (reportCursor.moveToNext()); 
       } 


       return reportList; 
     } 

Ошибка ->

07-23 13:16:11.393: E/AndroidRuntime(991): java.lang.NullPointerException 
07-23 13:16:11.393: E/AndroidRuntime(991): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:221) 
07-23 13:16:11.393: E/AndroidRuntime(991): at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:224) 
07-23 13:16:11.393: E/AndroidRuntime(991): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164) 
07-23 13:16:11.393: E/AndroidRuntime(991): at com.example.fuelcheck.FuelStoredInfo.open(FuelStoredInfo.java:104) 
07-23 13:16:11.393: E/AndroidRuntime(991): at com.example.fuelcheck.ReportGraph.getIntent(ReportGraph.java:36) 
+0

[Inspire здесь] (http://www.androidhive.info/2011/11/android-sqlite-database-tutorial/) – CRUSADER

+0

@CRUSADER Спасибо за комментирование. Но у меня уже есть настройка и работа с базой данных. Я просто не могу понять, как преобразовать определенный столбец в массив и использовать его далее при построении графика. –

+0

Что вы хотите сказать о том, что вы хотите вернуть массив String из столбца db. Правильно? – CRUSADER

ответ

1

Вот пример, который можно использовать ..

public String[] getAllContacts() { 
    String[] contactList ; 
    int i = 0; 
    // Select All Query 
    String selectQuery = "SELECT * FROM " + TABLE_CONTACTS;//You fetch query 

    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 
    int count = cursor.getCount(); 
    contactList = new String[count]; 
    // looping through all rows and adding to array 
    if (cursor.moveToFirst()) { 
     do { 
      contactList[i] = cursor.getString(0);//getting data from column 0 
      i++; 
      // Adding contact to list 
      } while (cursor.moveToNext()); 
    } 

    // return contact list 
    return contactList; 
} 

У меня есть уши данные из столбца 0, но вы можете получить любой столбец ...

Надеется, что это помогает ..

+0

Отправьте свой код в свой вопрос, чтобы мы могли провести вас. – CRUSADER

+0

@PoojaGaonkar проверить 'reportCursor! = Null' .. Есть ли данные в топливной таблице? – CRUSADER

+0

проверить значение счетчика, которое вы получаете из 'reportCursor.getCount()' не равно – CRUSADER