getReadableDatabase 崩溃,onCreate 未被调用
getReadableDatabase crashing, onCreate not being called
这段代码中DatabaseHandler不执行是怎么回事onCreate()
?
这个原始列表应用程序 运行 很棒,我正处于尝试将数据库注入应用程序的初始阶段,以便列表显示记录而不是编码字符串。
Android Intellisense 显示方法的可用性,但应用程序在 运行 时崩溃。我怀疑 onCreate()
从未被调用,因为 Log.d
消息从未出现在 logcat 中。
我尝试了 db 实例化或上下文传递的许多组合都无济于事。
我正在使用 adb logcat > lr.txt 从 phone 拉取 logcat 因为我不能 运行 模拟器,因为开发机器是AMD 而不是 Intel 处理器。
这是数据库方法class:
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteStatement;
import android.util.Log;
import android.widget.TextView;
public class DatabaseHandler extends SQLiteOpenHelper {
// for our logs
public static final String TAG = "DatabaseHandler.java";
public TextView tvstatus;
// database version
private static final int DATABASE_VERSION = 8;
// database name
protected static final String DATABASE_NAME = "LoadRunner";
// table details
public String tableName = "loadrunner";
public String fieldObjectId = "id";
public String fieldObjectName = "name";
public String fieldObjectDescription = "description";
// constructor
public DatabaseHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
// creating table
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "";
this.tvstatus.setText("Creating table");
sql += "CREATE TABLE " + tableName;
sql += " ( ";
sql += fieldObjectId + " INTEGER PRIMARY KEY AUTOINCREMENT, ";
sql += fieldObjectName + " TEXT, ";
sql += fieldObjectDescription + " TEXT ";
sql += " ) ";
Log.d("Loadrunner", "Create table");
db.execSQL(sql);
this.tvstatus.setText("Table created...");
// create the index for our INSERT OR REPLACE INTO statement.
// this acts as the WHERE name="name input" AND description="description input"
// if that WHERE clause is true, I mean, it finds the same name and description in the database,
// it will be REPLACEd.
// ELSE, what's in the database will remain and the input will be INSERTed (new record)
String INDEX = "CREATE UNIQUE INDEX locations_index ON "
+ tableName + " (name, description)";
db.execSQL(INDEX);
}
/*
* When upgrading the database, it will drop the current table and recreate.
*/
这是 Mainactivity 方法:
TableMainLayout 是显示列表的下一个 activity 调用。
我从 codeofaninja.com 收到了原始代码并正在向其中添加数据库。
当我注释掉 getreadabledatabase() 时,应用程序 运行 没有数据库调用或记录需要。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/* Loads next module */
db = new DatabaseHandler(this);
db.getReadableDatabase();
//this.db.onCreate(SQLiteDatabase this.db);
Log.d("Loadrunner ", "Loadrunner MainActivity DB var");
setContentView(new TableMainLayout(this));
Log.d("Loadrunner ", "Loadrunner MainActivity Content set");
//this.db.insertFast(40);
这里是 logcat:
D/Database( 5891): dbopen(): path = /data/data/com.example.tablefreezepane/databases/LoadRunner, flag = 6, file size = 3072
D/Database( 5891): dbopen(): path = /data/data/com.example.tablefreezepane/databases/LoadRunner, mode: delete, disk free size: 64 M, handle: 0x336f70
W/ContentService( 121): binderDied() at ObserverNode name com.google.android.gsf.gservices
D/Database( 5891): dbclose(): path = /data/data/com.example.tablefreezepane/databases/LoadRunner, handle = 0x336f70
D/AndroidRuntime( 5891): Shutting down VM
应用程序在 phone 崩溃:
The Application LoadRunner(process com.example.tablefreezepane) has stopped unexpectedly. Please try again.
发现问题!:this.tvstatus.setText("Table created...");这一直是一个 activity 问题。我不认为我在屏幕上显示该表格。我重新整理了一下,应用程序继续运行。所以现在我可以追求两个问题。清理显示并开始调查创建的 table。它在 phone 上。感谢@Jemshit 的指导。我愿意接受任何你愿意提供的。哦,这是美好的一天! –
我没有看到您获得了文本视图的引用。所以当你 call.settext 时 tvstatus 没有指向任何东西。这会导致 nopointerexception..
首先使用 findviewbyid 获取参考。
这段代码中DatabaseHandler不执行是怎么回事onCreate()
?
这个原始列表应用程序 运行 很棒,我正处于尝试将数据库注入应用程序的初始阶段,以便列表显示记录而不是编码字符串。
Android Intellisense 显示方法的可用性,但应用程序在 运行 时崩溃。我怀疑 onCreate()
从未被调用,因为 Log.d
消息从未出现在 logcat 中。
我尝试了 db 实例化或上下文传递的许多组合都无济于事。
我正在使用 adb logcat > lr.txt 从 phone 拉取 logcat 因为我不能 运行 模拟器,因为开发机器是AMD 而不是 Intel 处理器。
这是数据库方法class:
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteStatement;
import android.util.Log;
import android.widget.TextView;
public class DatabaseHandler extends SQLiteOpenHelper {
// for our logs
public static final String TAG = "DatabaseHandler.java";
public TextView tvstatus;
// database version
private static final int DATABASE_VERSION = 8;
// database name
protected static final String DATABASE_NAME = "LoadRunner";
// table details
public String tableName = "loadrunner";
public String fieldObjectId = "id";
public String fieldObjectName = "name";
public String fieldObjectDescription = "description";
// constructor
public DatabaseHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
// creating table
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "";
this.tvstatus.setText("Creating table");
sql += "CREATE TABLE " + tableName;
sql += " ( ";
sql += fieldObjectId + " INTEGER PRIMARY KEY AUTOINCREMENT, ";
sql += fieldObjectName + " TEXT, ";
sql += fieldObjectDescription + " TEXT ";
sql += " ) ";
Log.d("Loadrunner", "Create table");
db.execSQL(sql);
this.tvstatus.setText("Table created...");
// create the index for our INSERT OR REPLACE INTO statement.
// this acts as the WHERE name="name input" AND description="description input"
// if that WHERE clause is true, I mean, it finds the same name and description in the database,
// it will be REPLACEd.
// ELSE, what's in the database will remain and the input will be INSERTed (new record)
String INDEX = "CREATE UNIQUE INDEX locations_index ON "
+ tableName + " (name, description)";
db.execSQL(INDEX);
}
/*
* When upgrading the database, it will drop the current table and recreate.
*/
这是 Mainactivity 方法: TableMainLayout 是显示列表的下一个 activity 调用。 我从 codeofaninja.com 收到了原始代码并正在向其中添加数据库。 当我注释掉 getreadabledatabase() 时,应用程序 运行 没有数据库调用或记录需要。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/* Loads next module */
db = new DatabaseHandler(this);
db.getReadableDatabase();
//this.db.onCreate(SQLiteDatabase this.db);
Log.d("Loadrunner ", "Loadrunner MainActivity DB var");
setContentView(new TableMainLayout(this));
Log.d("Loadrunner ", "Loadrunner MainActivity Content set");
//this.db.insertFast(40);
这里是 logcat:
D/Database( 5891): dbopen(): path = /data/data/com.example.tablefreezepane/databases/LoadRunner, flag = 6, file size = 3072
D/Database( 5891): dbopen(): path = /data/data/com.example.tablefreezepane/databases/LoadRunner, mode: delete, disk free size: 64 M, handle: 0x336f70
W/ContentService( 121): binderDied() at ObserverNode name com.google.android.gsf.gservices
D/Database( 5891): dbclose(): path = /data/data/com.example.tablefreezepane/databases/LoadRunner, handle = 0x336f70
D/AndroidRuntime( 5891): Shutting down VM
应用程序在 phone 崩溃:
The Application LoadRunner(process com.example.tablefreezepane) has stopped unexpectedly. Please try again.
发现问题!:this.tvstatus.setText("Table created...");这一直是一个 activity 问题。我不认为我在屏幕上显示该表格。我重新整理了一下,应用程序继续运行。所以现在我可以追求两个问题。清理显示并开始调查创建的 table。它在 phone 上。感谢@Jemshit 的指导。我愿意接受任何你愿意提供的。哦,这是美好的一天! –
我没有看到您获得了文本视图的引用。所以当你 call.settext 时 tvstatus 没有指向任何东西。这会导致 nopointerexception.. 首先使用 findviewbyid 获取参考。