Android 为什么我的应用程序在我的手机上崩溃,但在AVD模拟器上却没有?
我已经编写了一个使用SQLite db的应用程序。在第一阶段,当我不使用SQLite,只使用普通字段和常用字段来存储数据时,我的应用程序在我的手机上运行良好。但现在,当我使用SQLite高效地存储和提取数据时,我的应用程序在我的手机上崩溃了。有趣的是,它在我的计算机上的AVD模拟器上运行良好。知道为什么会这样吗 这是我的DB类:Android 为什么我的应用程序在我的手机上崩溃,但在AVD模拟器上却没有?,android,sqlite,avd,Android,Sqlite,Avd,我已经编写了一个使用SQLite db的应用程序。在第一阶段,当我不使用SQLite,只使用普通字段和常用字段来存储数据时,我的应用程序在我的手机上运行良好。但现在,当我使用SQLite高效地存储和提取数据时,我的应用程序在我的手机上崩溃了。有趣的是,它在我的计算机上的AVD模拟器上运行良好。知道为什么会这样吗 这是我的DB类: public class WordsDB extends SQLiteOpenHelper { static final String DATABASE_NA
public class WordsDB extends SQLiteOpenHelper {
static final String DATABASE_NAME = "DicDB";
static final String TermTable = "Terms";
static final String ID = "id";
static final String Selected = "selected";
static final String Term = "term";
static final String Br = "br_phon";
static final String NAm = "nam_phon";
static final String Type = "type";
static final String Noun = "noun";
static final String Verb = "verb";
static final String Adjective = "adjective";
static final String Adverb = "adverb";
static final String DefTable = "Definitions";
static final String Def = "definition";
static final String Ex = "example";
public static final int DATABASE_VERSION = 1;
private static final String TERM_TABLE_CREATE = "Create table " + TermTable +
"(" + ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
Selected + " VARCHAR(5) ," +
Term + " VARCHAR(20) ," +
Br + " VARCHAR(20) ," +
NAm + " VARCHAR(20) ," +
Type + " VARCHAR(10) ," +
Noun + " VARCHAR(20) ," +
Verb + " VARCHAR(20) ," +
Adjective + " VARCHAR(20) ," +
Adverb + " VARCHAR(20)) ";
private static final String DEF_TABLE_CREATE = "Create table " + DefTable +
"(" + ID + " INTEGER PRIMARY KEY ," +
Def + " VARCHAR(30) ," +
Ex + " VARCHAR(160)) ";
public WordsDB(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db)
{
db.execSQL(TERM_TABLE_CREATE);
db.execSQL(DEF_TABLE_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
db.execSQL("DROP TABLE IF EXISTS " + TermTable);
db.execSQL("DROP TABLE IF EXISTS " + DefTable);
onCreate(db);
}
}
下面是DataSource类:
public class WordsDS {
private WordsDB dbHelper;
private SQLiteDatabase db;
public WordsDS(Context context) {
dbHelper = new WordsDB(context);
}
public void open() throws SQLException {
db = dbHelper.getWritableDatabase();
}
public void close() {
db.close();
}
// Methods to inset, update and extract data from table
.......
}
在我的主要活动中,我用WordsDS类创建了一个对象,通过open方法,我获得了可写数据库等。在我的其他类中,我使用WordsDS对象,并通过它插入、更新和提取数据。首先,你必须卸载该应用程序以进行新的安装。这意味着所有创建的数据库都将在您的手机上擦除。这将确保在添加新列或数据库结构发生更改时,将创建数据库。您可能会认为onUpgrade方法可以为您实现这一点,但它不会
至于在手机上调试你的应用程序。首先,您必须在计算机上安装手机驱动程序。之后,您现在可以运行adb logcat。除了代码之外,还可以发布logcat中的异常stacktrace。@Ali您如何使用设备调试应用程序?是否正在导出.apk文件并将其安装到设备上?如果是这样,请尝试将设备连接到计算机,并像在模拟器上那样进行调试。这样您就可以访问日志cat和崩溃日志。顺便说一句,由于信息有限,现在任何人都无法帮助您,如果您能发布错误日志和源代码,我们可以帮助您进行调试。@user88975是的,我在设备上安装生成的.apk文件。但是我不能尝试调试模式。我的移动调试模式在我的计算机上不起作用,我无法通过DDMS访问它。有没有办法解决这个问题?看看这个,希望它能帮助“我的移动调试模式在我的电脑上不起作用”——然后你需要先解决这个问题。