Android 原因:java.lang.InstantiationException,但我没有';我不知道如何修复,为什么
我已经编辑了源代码,但是我有bug,我不明白源代码类LineGraph.java在哪里以及为什么会出现错误 公共类LineGraph扩展活动{Android 原因:java.lang.InstantiationException,但我没有';我不知道如何修复,为什么,android,sqlite,graph,Android,Sqlite,Graph,我已经编辑了源代码,但是我有bug,我不明白源代码类LineGraph.java在哪里以及为什么会出现错误 公共类LineGraph扩展活动{ 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
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
有人能帮我吗?不要替换
活动的构造函数。每个活动
都由系统实例化,它需要有一个公共
无参数构造函数
一旦告诉系统要启动线形图
活动
,系统将尝试执行新建线形图()
。然后,系统设置上下文
和活动
所需的所有状态。完成后,它将调用onCreate
方法
你可以这样做
public class LineGraph extends Activity {
public LineGraph() {
super();
// you could do init here, but you better don't
}
}
但我建议不要这样做,因为此时您没有上下文
,而且活动
中的任何内容都不起作用
在onCreate
中执行此操作
附带说明:将类(如DBHelper
)放在它们自己的文件中通常比将它们包含在大型代码段中更好。如果您不将LineGraph
作为活动
,这也是一个好主意,因为它已经处理了数据库访问(或者将数据库访问部分提取到它自己的类文件中)。尝试让每个对象承担一项责任。您是否在AndroidManifest.xml中声明了此活动?如果您这样做,什么是android:name
value?您已经为这个类提供了一个构造函数。不要那样做。实例的构建由Android为您处理。@Wenhui是的,这是正确的???@David Wasser,嗯,有些困惑,因为我自学成才,但我会尝试,感谢上帝保佑:)Android有一个管理生命周期(创建、销毁等)的框架对于某些组件,您需要了解其工作原理,否则将浪费大量时间。如果您是Android编程新手(或一般编程新手),那么我建议您看看developer.Android.com上提供的一些示例应用程序,或者看看我仍然不了解的示例,您能举个例子吗??意味着我必须在DBHelper和线图之间进行分隔?@RinkuTriadi您不能做任何事情。如果每个类都有一个(和它自己的文件),那么它只是一个更干净的代码样式。例如,如果您想从另一个活动
访问同一数据库,那么将数据访问与活动
分离会更容易。