2016-09-03 12 views
0

私が持っている問題で私を助けることができるかどうかは疑問です。
私はSQLiteデータベースを作成しました。特定の日付に投薬が行われたかどうかに基づいて円グラフを作成したいと考えています。テーブルにアンドロイドのsqliteデータベース円グラフ

// sql query to create table for daily routine 
    String sql6 = "CREATE TABLE " 
      + TABLE_DAILY_ROUTINE + " (" 
      + COL_DAILY_ROUTINE_DATE + " VARCHAR, " 
      + COL_DAILY_ROUTINE_TIME_ID + " INTEGER," 
      + COL_DAILY_ROUTINE_TIME_HOUR + " INTEGER , " 
      + COL_DAILY_ROUTINE_TIME_MIN + " INTEGER , " 
      + COL_DAILY_ROUTINE_MED_TAKEN + " TEXT ," 
      + COL_DAILY_ROUTINE_MED_QUANTITY + " INTEGER, " 
      + COL_DAILY_ROUTINE_MED_ID + " VARCHAR, " 
      + "PRIMARY KEY (" + COL_DAILY_ROUTINE_DATE + ", " + COL_DAILY_ROUTINE_TIME_ID + ")," 
      + "FOREIGN KEY (" + COL_DAILY_ROUTINE_MED_ID + ") REFERENCES " + TABLE_MEDICATION + "(" 
      + COL_MEDICATION_ID + ") ON DELETE CASCADE);"; 

円グラフ活動

public class PieChart extends Activity { 

SQLiteDatabase ourDatabase; 
Database db; 
DatabaseHelper dbHelper; 
String date; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.pie_chart_layout); 
    db = new Database(this); 
    db.open(); 
    dbHelper = new DatabaseHelper(this); 
    ourDatabase = dbHelper.getWritableDatabase(); 


    String sql = "SELECT DAILY_ROUTINE_MED_TAKEN, COUNT(DAILY_ROUTINE_MED_TAKEN) FROM DAILY_ROUTINE\n" + 
      "WHERE DAILY_ROUTINE_DATE = ' + date + ' GROUP BY DAILY_ROUTINE_MED_TAKEN " ; 
    Calendar calendar = Calendar.getInstance(); 
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
    calendar.add(Calendar.DATE, 1); 
    date = sdf.format(calendar.getTime()); 
    Cursor c = ourDatabase.rawQuery(sql, null); 
    int count = c.getCount(); 
    int[] colors={Color.RED, Color.GREEN}; 

    double[] values = new double[count]; 
    String[] categoryNames = new String[count]; 

    for (int i = 0; i < count; i++) { 
     c.moveToNext(); 
     categoryNames[i] = c.getString(0); 
     values[i] = c.getDouble(1); 
    } 
    // Instantiating CategorySeries to plot Pie Chart 
    CategorySeries distributionSeries = new CategorySeries(" Android version distribution as on October 1, 2012"); 
    for (int i = 0; i < categoryNames.length; i++) { 
     // Adding a slice with its values and name to the Pie Chart 
     distributionSeries.add(categoryNames[i], values[i]); 
    } 

    // Instantiating a renderer for the Pie Chart 
    DefaultRenderer defaultRenderer = new DefaultRenderer(); 
    for (int i = 0; i < categoryNames.length; i++) { 
     SimpleSeriesRenderer seriesRenderer = new SimpleSeriesRenderer(); 
     seriesRenderer.setColor(colors[i]); 
     seriesRenderer.setDisplayChartValues(true); 
     defaultRenderer.addSeriesRenderer(seriesRenderer); 
    } 

    defaultRenderer.setChartTitle("Patient Daily Adherance to Medication"); 
    defaultRenderer.setChartTitleTextSize(60); 
    defaultRenderer.setZoomButtonsVisible(false); 
    defaultRenderer.setLegendTextSize(70); 
    defaultRenderer.setLabelsTextSize(80); 

    Intent intent = ChartFactory.getPieChartIntent(getApplicationContext(), distributionSeries, defaultRenderer, "AChartEnginePieChartDemo"); 

    // Start Activity 
    startActivity(intent); 

    c.close(); 
    ourDatabase.close(); 
} 
} 

を作成するための

コードは、データベースが正しいと日付で私のハードコードは、文字列の日付を交換するとき、私は円グラフが表示され得ます。
文字列の日付は、日付がデータベースにあるときの前の日です。これは問題ではないでしょう。

私は間違いなしです。
タイトルは表示されていますが、円グラフはありません。問題の内容と問題点を教えてください。
初期のforループとは関係がありますが、私の指を置くことはできません。

+0

だあなたはあなたのコードをデバッグステップバイステップでしようとしたことがありますか? –

+0

はい、私はデバッグを試みましたが、私はアンドロイドに慣れていて、円グラフの使用は私には何か新しいものでした。私はいくつかのチュートリアルを飛ばして、問題を見つけることができないようです。それが何であり、私が見ることができるかあなたは何か考えていますか? –

+0

SQLに改行文字があるのはなぜですか? –

答えて

0

私はいくつかのコード行を移動し、date変数の値を連結する必要があると思います。

今、列が明示的に文字列' + date + 'と等しい場所を照会しようとしています。

// What is 'date' here? null, most likely... 
String sql = "SELECT DAILY_ROUTINE_MED_TAKEN, COUNT(DAILY_ROUTINE_MED_TAKEN) FROM DAILY_ROUTINE\n" + 
     "WHERE DAILY_ROUTINE_DATE = ' + date + ' GROUP BY DAILY_ROUTINE_MED_TAKEN " ; 

// Here's where you do get the value of the date string 
Calendar calendar = Calendar.getInstance(); 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
calendar.add(Calendar.DATE, 1); 
date = sdf.format(calendar.getTime()); 

// move the sql down here 

私が代わりexecSQLまたはrawQueryのSqliteDatabaseクラスのqueryメソッドを使用しようとしていることをお勧めしたいが、それは個人的な好み

関連する問題