0
public void execSqlFromAssets(String path) {
    InputStream input;
    String text;
    try {
        input = mCtx.getAssets().open(path + ".txt");
        int size = input.available();
        byte[] buffer = new byte[size];
        input.read(buffer);
        input.close();
        text = new String(buffer);
        String[] inserts = text.split(";");
        // SQLiteDatabase db = mDb;
        for (String insert : inserts) {
            insert = insert;
            Log.w(TAG, insert);
            try {
                mDb.execSQL(insert);
            } catch (Exception e) {
                String err = (e.getMessage() == null) ? "Cant execute sql"
                        + insert : e.getMessage();
                Log.w(TAG, err);
            }
        }

    } catch (IOException e) {
        Log.w(TAG, "execSqlFromAssets: " + path + " file not found");
    }

}

これは私のコードの問題で、mDb.execSQL(insert)を含む行にあります。値がnullであることが読み取れない例外をスローします。エラーメッセージの1つは、 次のとおりです。sqlINSERT INTO food(name、cals)VALUES( "kolac"、270)を実行できません。どんな助けでも大歓迎です

4

1 に答える 1

0

@Preet Sanghaがリクエストしたので、解決策を投稿します。私の問題は、onCreateメソッドのSQLiteOpenHelperインスタンスでこの関数を呼び出し、mDbインスタンスがまだ作成されていなかったため、関数をこれに変更したことでした

public void execSqlFromAssets(String path, SQLiteDatabase db) {
    if(db == null){
        db = mDb;
    }
    InputStream input;
    String text;
    try {
        input = mCtx.getAssets().open(path + ".txt");
        int size = input.available();
        byte[] buffer = new byte[size];
        input.read(buffer);
        input.close();
        text = new String(buffer);
        String[] inserts = text.split(";");
        for (String insert : inserts) {
            try {
                db.execSQL(insert);
            } catch (Exception e) {
                String err = (e.getMessage() == null) ? "Cant execute sql"
                        + insert : e.getMessage();
                Log.w(TAG, err);
            }
        }

    } catch (IOException e) {
        Log.w(TAG, "execSqlFromAssets: " + path + " file not found");
    }

}

したがって、onCreate からこの関数を呼び出す場合は、2 番目の引数として db を送信し、アプリケーションの他のコンポーネントから呼び出す場合は、2 番目の引数として null を送信します。

于 2012-04-28T09:47:23.610 に答える