0
新Android開發和Java兩種,試圖分開我查詢到的查詢/命令文件,從數據庫繼承管理QueryBase.java文件。當我運行我的應用程序出現以下錯誤: 「關於調用堆棧溢出Landroid /數據庫/源碼/ SQLiteOpenHelper ;. <init>:VLLLI」
08-28 09:31:02.266: I/dalvikvm(536): threadid=1: stack overflow on call to Landroid/database/sqlite/SQLiteOpenHelper;.<init>:VLLLI
08-28 09:31:02.266: I/dalvikvm(536): method requires 32+20+8=60 bytes, fp is 0x432d1318 (24 left)
08-28 09:31:02.266: I/dalvikvm(536): expanding stack end (0x432d1300 to 0x432d1000)
08-28 09:31:02.266: I/dalvikvm(536): Shrank stack (to 0x432d1300, curFrame is 0x432d3eb8)
08-28 09:31:02.266: D/AndroidRuntime(536): Shutting down VM
08-28 09:31:02.266: W/dalvikvm(536): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
08-28 09:31:02.356: D/dalvikvm(536): GC_FOR_MALLOC freed 4131 objects/329392 bytes in 47ms
08-28 09:31:02.366: E/AndroidRuntime(536): FATAL EXCEPTION: main
08-28 09:31:02.366: E/AndroidRuntime(536): java.lang.StackOverflowError
08-28 09:31:02.366: E/AndroidRuntime(536): at com.childsoft.icantalk.queries.QueryBase.<init>(QueryBase.java:18)
我從來沒有真正運行前到堆棧溢出錯誤!我不確定如何糾正這個問題。我有一個獨立的SchemaHelper生成我的數據庫 - 工作正常。我QueryBase.java看起來是這樣的:
public class QueryBase extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "icantalk.db";
private static final int DATABASE_VERSION = 1;
protected SQLiteDatabase sqdb;
protected QueryBase sqh;
public QueryBase(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
this.sqh = new QueryBase(context);
this.sqdb = sqh.getWritableDatabase();
}
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
線18 QueryBase是這樣的:
super(context, DATABASE_NAME, null, DATABASE_VERSION);
從QueryBase繼承一個例子命令文件看起來是這樣的:
public class ChildCommands extends QueryBase {
public ChildCommands(Context context) {
super(context);
}
public long addChild(String name)
{
ContentValues cv = new ContentValues();
cv.put(ChildrenTable.NAME, name);
SQLiteDatabase sd = super.getWritableDatabase();
long result = sd.insert(ChildrenTable.TABLE_NAME, ChildrenTable.NAME, cv);
return result;
}
}
並且此方法的示例調用看起來如下所示:
private ChildCommands command;
.....
this.command = new ChildCommands(this);
command.addChild(childsNameValue);
啊我完全錯過了,在構造函數中創建一個新的實例。謝謝,會放棄它! – Kiada
將在9分鐘內接受答覆,工作正常:)謝謝! – Kiada