-1

ソースコードを編集しましたが、バグがあり、エラーが発生する場所と理由がわかりません。これはソースコードクラス LineGraph.java です

public class LineGraph extends 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

誰でも私を助けることができますか?

4

1 に答える 1

1

のコンストラクターを置き換えないでくださいActivity。EveryActivityはシステムによってインスタンス化され、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オブジェクトごとに 1 つの責任を持つようにしてください。

于 2012-11-28T18:37:02.373 に答える