我已编辑过源代码,但我有bug,我不明白在哪里,为什么会出现错误,这是源代码类LineGraph.java
公共类LineGraph扩展了Activity {
public static final String ROW_ID = "id";
public static final String ROW_NAMA = "nama";
public static final String ROW_BERAT = "berat";
public static final String DATABASE_NAME = "tes.sqlite";
public static final String DATABASE_TABLE = "tis";
public static final int DATABASE_VERSION = 1;
public SQLiteDatabase database;
public DBHelper dbhelper;
public final Context kontext;
public static class DBHelper extends SQLiteOpenHelper {
public DBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" + ROW_ID
+ " INTEGER PRIMARY KEY AUTOINCREMENT, " + ROW_NAMA
+ " TEXT NOT NULL, " + ROW_BERAT + " 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 LineGraph(Context c) {
kontext = c;
}
public LineGraph open() {
dbhelper = new DBHelper(kontext);
database = dbhelper.getWritableDatabase();
return this;
}
public void close() {
dbhelper.close();
}
public long createEntry(String data, String date) {
// , String date
// TODO Auto-generated method stub
ContentValues cv = new ContentValues();
cv.put(ROW_NAMA, data);
cv.put(ROW_BERAT, date);
return database.insert(DATABASE_TABLE, null, cv);
}
public String getBMIID() {
// TODO Auto-generated method stub
String[] column = new String[] { ROW_ID };
Cursor c = database.query(DATABASE_TABLE, column, null, null, null,
null, null);
String result = "";
int iID = c.getColumnIndex(ROW_ID);
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
result = result + c.getString(iID);
}
return result;
}
public String getBMIDataData() {
String[] column = new String[] { ROW_NAMA };
Cursor c = database.query(DATABASE_TABLE, column, null, null, null,
null, null);
String result = "";
int iData = c.getColumnIndex(ROW_NAMA);
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
result = result + c.getString(iData);
}
return result;
}
public String getBMIDateData() {
String[] column = new String[] { ROW_BERAT };
Cursor c = database.query(DATABASE_TABLE, column, null, null, null,
null, null);
String result = "";
int iDate = c.getColumnIndex(ROW_BERAT);
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
result = result + c.getString(iDate);
}
return result;
}
public void updateEntry(long lId, String mData, String mDate) {
// TODO Auto-generated method stub
ContentValues cvUpdate = new ContentValues();
cvUpdate.put(ROW_NAMA, mData);
cvUpdate.put(ROW_BERAT, mDate);
database.update(DATABASE_TABLE, cvUpdate, ROW_ID + " = lId", null);
}
public String getData(long l) {
// TODO Auto-generated method stub
return null;
}
public String getDate(long l) {
// TODO Auto-generated method stub
return null;
}
public XYMultipleSeriesDataset getDemoDataset(String title) {
String[] column = new String[] { ROW_NAMA };
Cursor c = dbhelper.getWritableDatabase().query(DATABASE_TABLE,
column, null, null, null, null, null);
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
TimeSeries series = new TimeSeries("Line1");
TimeSeries series2 = new TimeSeries(title);
getBMIDataData();
while (!c.isAfterLast()) {
int date = c.getInt((Integer) c.getColumnIndexOrThrow("bmi_date"));
int weight = c
.getInt((Integer) c.getColumnIndexOrThrow("bmi_data"));
series2.add(weight, date);
c.moveToNext();
}
c.close();
dataset.addSeries(series);
dataset.addSeries(series2);
return dataset;
}
public Intent getIntent(Context context) {
// Lager TimeSeries for den første linja
XYMultipleSeriesDataset dataset = getDemoDataset("Line1");
// Kode for render
XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer();
// Optimalisering linje1
XYSeriesRenderer renderer = new XYSeriesRenderer();
renderer.setColor(Color.YELLOW);
renderer.setPointStyle(PointStyle.CIRCLE);
renderer.setFillPoints(true);
// Optimalisering linje2 husk rekke følgen
XYSeriesRenderer renderer2 = new XYSeriesRenderer();
renderer2.setColor(Color.BLUE);
renderer2.setPointStyle(PointStyle.SQUARE);
renderer2.setFillPoints(true);
// Legger til render seriene
mRenderer.addSeriesRenderer(renderer);
// Optimalisering grafen
mRenderer.setChartTitle("Test");
mRenderer.setZoomEnabled(true);
mRenderer.setZoomButtonsVisible(true);
mRenderer.setBackgroundColor(Color.BLACK);
mRenderer.setApplyBackgroundColor(true);
mRenderer.setXTitle("Dager");
mRenderer.setShowGrid(true);
mRenderer.addSeriesRenderer(renderer2);
Intent intent = ChartFactory.getLineChartIntent(context, dataset,
mRenderer, "Line Graph Title");
return intent;
}
}
这是logcat
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{android.graph/android.graph.LineGraph}: java.lang.InstantiationException: android.graph.LineGraph
Caused by: java.lang.InstantiationException: android.graph.LineGraph
有人可以帮助我吗?
答案 0 :(得分:1)
请勿替换Activity
的构造函数。每个Activity
都由系统实例化,它需要有一个public
无参数构造函数。
告诉系统您要启动LineGraph
Activity
后,它会尝试执行new LineGraph()
。之后,系统会为Context
设置Activity
和所有必需的状态。完成后,它将调用onCreate
方法。
你可以这样做
public class LineGraph extends Activity {
public LineGraph() {
super();
// you could do init here, but you better don't
}
}
但是我建议不要那样做,因为那时你没有Context
而且Activity
没有任何工作。
在onCreate
中进行。
在旁注中:将类似DBHelper
的类放在自己的文件中通常比将它们包含在大型代码中更好。如果你不使LineGraph
成为Activity
,这也是一个好主意,因为它已经处理了数据库访问(或将数据库访问部分提取到它自己的类文件中)。尽量保持每个对象的一个责任。