引起:java.lang.InstantiationException,但我不知道如何修复,以及为什么

时间:2012-11-28 18:22:40

标签: android sqlite graph

我已编辑过源代码,但我有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

有人可以帮助我吗?

1 个答案:

答案 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,这也是一个好主意,因为它已经处理了数据库访问(或将数据库访问部分提取到它自己的类文件中)。尽量保持每个对象的一个​​责任。