簡體   English   中英

為什么我的應用程序在手機上崩潰,但在AVD模擬器上卻沒有崩潰?

[英]Why does my app crash in my mobile phone but not on AVD emulator?

我編寫了一個使用SQLite db的應用程序。 在我不使用SQLite而是僅使用普通字段和普通字段存儲數據的第一階段,我的應用程序在手機中的運行情況就很好。 但是現在,當我使用SQLite有效存儲和提取數據時,我的應用程序在手機中崩潰了。 有趣的一點是,它在我的計算機上的AVD模擬器上運行良好。 知道為什么會這樣嗎?

這是我的數據庫類:

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類中創建一個對象,並通過開放方法獲得可寫數據庫,依此類推;在其他類中,我使用WordsDS對象並通過該對象插入,更新和提取數據。

首先,您必須卸載應用程序才能進行全新安裝。 這意味着所有創建的數據庫將在您的手機上擦除。 這將確保如果添加了新列或發生了數據庫結構更改,那么將創建數據庫。 您可能會認為onUpgrade方法可以為您完成此操作,但不會成功!

至於在移動設備上調試應用程序。 首先,您必須在計算機上安裝手機的驅動程序。 然后,您現在可以隨后運行adb logcat。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM