Java 无法使用android SQLite数据显示achartengine线图
数据库文件如下:Java 无法使用android SQLite数据显示achartengine线图,java,android,compiler-errors,achartengine,Java,Android,Compiler Errors,Achartengine,数据库文件如下: //The code below displays the database/table name, and the version number of the database. private static final String DATABASE_NAME = "gameScoresDB"; private static final String DATABASE_TABLE = "LS"; private static final int DATABASE_VERSI
//The code below displays the database/table name, and the version number of the database.
private static final String DATABASE_NAME = "gameScoresDB";
private static final String DATABASE_TABLE = "LS";
private static final int DATABASE_VERSION = 1;
private DBHelp ourHelper;
private final Context ourContext;
private SQLiteDatabase ourDatabase;
public class DBHelp extends SQLiteOpenHelper {
public DBHelp(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" +
KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
KEY_LEVEL + " TEXT NOT NULL, " +
KEY_SCORE + " TEXT NOT NULL, " +
KEY_MOVES + " TEXT NOT NULL, " +
KEY_TIME_COMPLETED + " TEXT NOT NULL, " +
KEY_INCORRECT_BUTTONS_PRESSED + " TEXT NOT NULL, " +
KEY_LSHAKE + " TEXT NOT NULL, " +
KEY_MSHAKE + " TEXT NOT NULL, " +
KEY_HSHAKE + " TEXT NOT NULL, " +
KEY_ASOUND + " TEXT NOT NULL, " +
KEY_MSOUND + " TEXT NOT NULL, " +
KEY_TIME_STAMP + " TEXT NOT NULL);"
);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
onCreate(db);
}
}
public DBG_handler(Context c){
ourContext = c;
}
public DBG_handler open() throws SQLException{
ourHelper = new DBHelp(ourContext);
ourDatabase = ourHelper.getWritableDatabase();
return this;
}
public void close(){
ourHelper.close();
}
public long createEntry(String sql_LevelName, String sql_score, String sql_numberMoves, String sql_timeCompleted,
String sql_incorrectButtons, String sql_lShake, String sql_mShake, String sql_hShake,
String sql_aSound, String sql_mSound, String sql_tStamp) {
ContentValues cv = new ContentValues();
cv.put(KEY_LEVEL, sql_LevelName);
cv.put(KEY_SCORE, sql_score);
cv.put(KEY_MOVES, sql_numberMoves);
cv.put(KEY_TIME_COMPLETED, sql_timeCompleted);
cv.put(KEY_INCORRECT_BUTTONS_PRESSED, sql_incorrectButtons);
cv.put(KEY_LSHAKE, sql_lShake);
cv.put(KEY_MSHAKE, sql_mShake);
cv.put(KEY_HSHAKE, sql_hShake);
cv.put(KEY_ASOUND, sql_aSound);
cv.put(KEY_MSOUND, sql_mSound);
cv.put(KEY_TIME_STAMP, sql_tStamp);
return ourDatabase.insert(DATABASE_TABLE, null, cv);
}
public String getData() {
// TODO Auto-generated method stub
String[] columns = new String[] {KEY_ROWID, KEY_LEVEL, KEY_SCORE, KEY_MOVES, KEY_TIME_COMPLETED, KEY_INCORRECT_BUTTONS_PRESSED,
KEY_LSHAKE, KEY_MSHAKE, KEY_HSHAKE, KEY_ASOUND, KEY_MSOUND, KEY_TIME_STAMP};
Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null, null, null);
String result = "";
int iRow = c.getColumnIndex(KEY_ROWID);
int iLevel = c.getColumnIndex(KEY_LEVEL);
int iScore = c.getColumnIndex(KEY_SCORE);
int iMoves = c.getColumnIndex(KEY_MOVES);
int iTC = c.getColumnIndex(KEY_TIME_COMPLETED);
int iIBP = c.getColumnIndex(KEY_INCORRECT_BUTTONS_PRESSED);
int ilShake = c.getColumnIndex(KEY_LSHAKE);
int imShake = c.getColumnIndex(KEY_MSHAKE);
int ihShake = c.getColumnIndex(KEY_HSHAKE);
int iaSound = c.getColumnIndex(KEY_ASOUND);
int imSound = c.getColumnIndex(KEY_MSOUND);
int itStamp = c.getColumnIndex(KEY_TIME_STAMP);
for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){
result = result + c.getString(iRow) + ", Level: " + c.getString(iLevel) + ", Score: " + c.getString(iScore)
+ " , Moves: "+ c.getString(iMoves) + " , Time Completed: " + c.getString(iTC) + " , Incorrect Buttons: " + c.getString(iIBP)
+ " , Light Shakes: " + c.getString(ilShake) + " , Medium Shakes: " + c.getString(imShake) + ", Hard Shakes: " + c.getString(ihShake)
+ " , Average Sound: " + c.getString(iaSound) + " , Max Sound: " + c.getString(imSound) + " , Time: " + c.getString(itStamp) + "\n";
}
return result;
}
public int[] getaSound() {
String[] columns = new String[] {KEY_ASOUND};
Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null, null, null);
int[] result = new int[] {};
int iaSound = c.getColumnIndex(KEY_ASOUND);
for(int i = 0; i < c.getCount(); i++){
result[i] = Integer.parseInt(c.getString(iaSound));
}
return result;
}
public String getmSound() {
String[] columns = new String[] {KEY_MSOUND};
Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null, null, null);
String result = "";
int imSound = c.getColumnIndex(KEY_MSOUND);
for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){
result = result + c.getString(imSound);
}
return result;
}
public XYSeries getDemoDataset() {
String[] columns = new String[] {KEY_ASOUND};
Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null, null, null);
XYSeries x = new XYSeries("X Series");
int iaSound = c.getColumnIndex(KEY_ASOUND);
int j [] = {};
for(int i = 0 ; i < c.getCount(); i++){
int i1 = Integer.parseInt(c.getString(iaSound));
x.add(j[i], i1);
}
return x;
}
public Intent getIntent() {
XYMultipleSeriesDataset dataset=new XYMultipleSeriesDataset();
dataset.addSeries(getDemoDataset());
XYSeriesRenderer Xrenderer=new XYSeriesRenderer();
Xrenderer.setColor(Color.GREEN);
Xrenderer.setPointStyle(PointStyle.DIAMOND);
Xrenderer.setDisplayChartValues(true);
Xrenderer.setLineWidth(2);
Xrenderer.setFillPoints(true);
XYMultipleSeriesRenderer mRenderer=new XYMultipleSeriesRenderer();
mRenderer.setChartTitle("X Vs Y Chart");
mRenderer.setXTitle("X Values");
mRenderer.setYTitle("Y Values");
mRenderer.setZoomButtonsVisible(true);
mRenderer.setXLabels(0);
mRenderer.setPanEnabled(false);
mRenderer.setShowGrid(true);
mRenderer.setClickEnabled(true);
mRenderer.addSeriesRenderer(Xrenderer);
Intent intent = ChartFactory.getLineChartIntent(ourContext, dataset, mRenderer, "hello");
return intent;
}
}
错误日志:
08-09 19:30:52.284: D/AndroidRuntime(27648): Shutting down VM
08-09 19:30:52.284: W/dalvikvm(27648): threadid=1: thread exiting with uncaught exception (group=0x41d79ba8)
08-09 19:30:52.284: E/AndroidRuntime(27648): FATAL EXCEPTION: main
08-09 19:30:52.284: E/AndroidRuntime(27648): Process: com.example.diss, PID: 27648
08-09 19:30:52.284: E/AndroidRuntime(27648): android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 4
08-09 19:30:52.284: E/AndroidRuntime(27648): at android.database.AbstractCursor.checkPosition(AbstractCursor.java:426)
08-09 19:30:52.284: E/AndroidRuntime(27648): at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
08-09 19:30:52.284: E/AndroidRuntime(27648): at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50)
08-09 19:30:52.284: E/AndroidRuntime(27648): at com.example.diss.DBG_handler.getDemoDataset(DBG_handler.java:176)
08-09 19:30:52.284: E/AndroidRuntime(27648): at com.example.diss.DBG_handler.getIntent(DBG_handler.java:184)
08-09 19:30:52.284: E/AndroidRuntime(27648): at com.example.diss.Score$1.onClick(Score.java:51)
08-09 19:30:52.284: E/AndroidRuntime(27648): at android.view.View.performClick(View.java:4438)
08-09 19:30:52.284: E/AndroidRuntime(27648): at android.view.View$PerformClick.run(View.java:18422)
08-09 19:30:52.284: E/AndroidRuntime(27648): at android.os.Handler.handleCallback(Handler.java:733)
08-09 19:30:52.284: E/AndroidRuntime(27648): at android.os.Handler.dispatchMessage(Handler.java:95)
08-09 19:30:52.284: E/AndroidRuntime(27648): at android.os.Looper.loop(Looper.java:136)
08-09 19:30:52.284: E/AndroidRuntime(27648): at android.app.ActivityThread.main(ActivityThread.java:5001)
08-09 19:30:52.284: E/AndroidRuntime(27648): at java.lang.reflect.Method.invokeNative(Native Method)
08-09 19:30:52.284: E/AndroidRuntime(27648): at java.lang.reflect.Method.invoke(Method.java:515)
08-09 19:30:52.284: E/AndroidRuntime(27648): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
08-09 19:30:52.284: E/AndroidRuntime(27648): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
08-09 19:30:52.284: E/AndroidRuntime(27648): at dalvik.system.NativeStart.main(Native Method)
08-09 19:35:52.354: I/Process(27648): Sending signal. PID: 27648 SIG: 9
08-09 19:35:52.714: D/libEGL(27825): loaded /system/lib/egl/libEGL_tegra.so
08-09 19:35:52.734: D/libEGL(27825): loaded /system/lib/egl/libGLESv1_CM_tegra.so
08-09 19:35:52.744: D/libEGL(27825): loaded /system/lib/egl/libGLESv2_tegra.so
08-09 19:35:52.774: D/OpenGLRenderer(27825): Enabling debug mode 0
08-09 19:35:52.824: W/IInputConnectionWrapper(27825): showStatusIcon on inactive InputConnection
I am new to programming using achartengine, so I'm just wondering why this the graph is not actually opening.
AbstractCursor.java在哪里?我没有一个叫做AbstractCursorok的类,你可以点击并指出哪一行是错误的吗?eclipse中没有显示错误,当运行项目时,一旦我试图打开图表,应用程序崩溃,这会打印在日志cat上。基本上我猜,这是一个数据库错误,而不是一个软件,只是试着注释一个软件并打印你的数据库输出,这可能会给你一个清晰的想法
08-09 19:30:52.284: D/AndroidRuntime(27648): Shutting down VM
08-09 19:30:52.284: W/dalvikvm(27648): threadid=1: thread exiting with uncaught exception (group=0x41d79ba8)
08-09 19:30:52.284: E/AndroidRuntime(27648): FATAL EXCEPTION: main
08-09 19:30:52.284: E/AndroidRuntime(27648): Process: com.example.diss, PID: 27648
08-09 19:30:52.284: E/AndroidRuntime(27648): android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 4
08-09 19:30:52.284: E/AndroidRuntime(27648): at android.database.AbstractCursor.checkPosition(AbstractCursor.java:426)
08-09 19:30:52.284: E/AndroidRuntime(27648): at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
08-09 19:30:52.284: E/AndroidRuntime(27648): at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50)
08-09 19:30:52.284: E/AndroidRuntime(27648): at com.example.diss.DBG_handler.getDemoDataset(DBG_handler.java:176)
08-09 19:30:52.284: E/AndroidRuntime(27648): at com.example.diss.DBG_handler.getIntent(DBG_handler.java:184)
08-09 19:30:52.284: E/AndroidRuntime(27648): at com.example.diss.Score$1.onClick(Score.java:51)
08-09 19:30:52.284: E/AndroidRuntime(27648): at android.view.View.performClick(View.java:4438)
08-09 19:30:52.284: E/AndroidRuntime(27648): at android.view.View$PerformClick.run(View.java:18422)
08-09 19:30:52.284: E/AndroidRuntime(27648): at android.os.Handler.handleCallback(Handler.java:733)
08-09 19:30:52.284: E/AndroidRuntime(27648): at android.os.Handler.dispatchMessage(Handler.java:95)
08-09 19:30:52.284: E/AndroidRuntime(27648): at android.os.Looper.loop(Looper.java:136)
08-09 19:30:52.284: E/AndroidRuntime(27648): at android.app.ActivityThread.main(ActivityThread.java:5001)
08-09 19:30:52.284: E/AndroidRuntime(27648): at java.lang.reflect.Method.invokeNative(Native Method)
08-09 19:30:52.284: E/AndroidRuntime(27648): at java.lang.reflect.Method.invoke(Method.java:515)
08-09 19:30:52.284: E/AndroidRuntime(27648): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
08-09 19:30:52.284: E/AndroidRuntime(27648): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
08-09 19:30:52.284: E/AndroidRuntime(27648): at dalvik.system.NativeStart.main(Native Method)
08-09 19:35:52.354: I/Process(27648): Sending signal. PID: 27648 SIG: 9
08-09 19:35:52.714: D/libEGL(27825): loaded /system/lib/egl/libEGL_tegra.so
08-09 19:35:52.734: D/libEGL(27825): loaded /system/lib/egl/libGLESv1_CM_tegra.so
08-09 19:35:52.744: D/libEGL(27825): loaded /system/lib/egl/libGLESv2_tegra.so
08-09 19:35:52.774: D/OpenGLRenderer(27825): Enabling debug mode 0
08-09 19:35:52.824: W/IInputConnectionWrapper(27825): showStatusIcon on inactive InputConnection
I am new to programming using achartengine, so I'm just wondering why this the graph is not actually opening.