1

崖から飛び降りる準備ができていると思います。一括挿入の目的で、プリロードされたsqliteデータベースを作成しようとしています。私のdbファイルが決して開かず、アプリがクラッシュしても。最後に、私はここで最もばかげた方法を使おうとしましたが、それでも不足しています:https ://github.com/jgilfelt/android-sqlite-asset-helper

関連するlogcatは次のとおりです。

09-11 13:41:34.359: I/Database(2913): sqlite returned: error code = 14, msg = cannot open file at source line 25467
09-11 13:41:34.359: E/Database(2913): sqlite3_open_v2("/data/data/com.anthonyce.mcathomie/databases/northwind", &handle, 2, NULL) failed
09-11 13:41:34.369: W/SQLiteAssetHelper(2913): could not open database northwind - unable to open database file
09-11 13:41:34.369: W/SQLiteAssetHelper(2913): copying database from assets...
09-11 13:41:34.369: W/SQLiteAssetHelper(2913): extracting file: 'Northwind-v1.db'...
09-11 13:41:34.779: W/SQLiteAssetHelper(2913): database copy complete
09-11 13:41:34.869: I/SQLiteAssetHelper(2913): successfully opened database northwind
09-11 13:41:34.889: D/AndroidRuntime(2913): Shutting down VM
09-11 13:41:34.889: W/dalvikvm(2913): threadid=1: thread exiting with uncaught exception (group=0x40015560)
09-11 13:41:34.910: E/AndroidRuntime(2913): FATAL EXCEPTION: main
09-11 13:41:34.910: E/AndroidRuntime(2913): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.anthonyce.mcathomie/com.anthonyce.mcathomie.GameActivity}: java.lang.ClassCastException: android.database.sqlite.SQLiteCursor
09-11 13:41:34.910: E/AndroidRuntime(2913):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
09-11 13:41:34.910: E/AndroidRuntime(2913):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
09-11 13:41:34.910: E/AndroidRuntime(2913):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
09-11 13:41:34.910: E/AndroidRuntime(2913):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
09-11 13:41:34.910: E/AndroidRuntime(2913):     at android.os.Handler.dispatchMessage(Handler.java:99)
09-11 13:41:34.910: E/AndroidRuntime(2913):     at android.os.Looper.loop(Looper.java:123)
09-11 13:41:34.910: E/AndroidRuntime(2913):     at android.app.ActivityThread.main(ActivityThread.java:3683)
09-11 13:41:34.910: E/AndroidRuntime(2913):     at java.lang.reflect.Method.invokeNative(Native Method)
09-11 13:41:34.910: E/AndroidRuntime(2913):     at java.lang.reflect.Method.invoke(Method.java:507)
09-11 13:41:34.910: E/AndroidRuntime(2913):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
09-11 13:41:34.910: E/AndroidRuntime(2913):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
09-11 13:41:34.910: E/AndroidRuntime(2913):     at dalvik.system.NativeStart.main(Native Method)
09-11 13:41:34.910: E/AndroidRuntime(2913): Caused by: java.lang.ClassCastException: android.database.sqlite.SQLiteCursor
09-11 13:41:34.910: E/AndroidRuntime(2913):     at com.anthonyce.mcathomie.GameActivity.onCreate(GameActivity.java:25)
09-11 13:41:34.910: E/AndroidRuntime(2913):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
09-11 13:41:34.910: E/AndroidRuntime(2913):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
09-11 13:41:34.910: E/AndroidRuntime(2913):     ... 11 more

コード。私はあなたを子供ではありません、私は同じ正確なサンプルファイルを使用しています。私はサンプルを段階的にコピーすることにひざまずきましたが、それでもこれらの厄介なエラーが発生します。

public class McatDatabase extends SQLiteAssetHelper{

private static final String DB_NAME = "northwind";
private static final int DB_VERSION = 1;
private static final String[] COLUMNS = {"LastName"};
private static final String TABLE_NAME = "Employees";

public McatDatabase(Context context) {
    super(context, DB_NAME, null, DB_VERSION);
}

public Cursor getQuestions() {
SQLiteDatabase db = getReadableDatabase();
Cursor c = db.query(TABLE_NAME, COLUMNS, null, null, null, null, null);
c.moveToFirst();
return c;
}

}

別のクラス:

public class GameActivity extends Activity {

    private McatDatabase db;
    private Cursor thequestions;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_game);

        db = new McatDatabase(this);
        thequestions = db.getQuestions();

        TextView tv = (TextView)findViewById(R.id.TextView1);
        tv.setText((CharSequence) thequestions);
        thequestions.close();
        db.close();
    }

}
4

1 に答える 1

0

カーソルをCharSequenceにキャストしようとしていますが、システムはそれを好まないため、ClassCast例外をスローしています。

カーソルをSimpleCursorAdapterに入れると、convertToStringメソッドを使用して変換を行うことができます。それ以外の場合は、変換を行う自分でカーソルを反復処理する必要があります。

文字通りの質問に答えました。質問のリストを作成しようとしているように見えるので、アダプターを使用してリストを作成するのではなく、なぜあなたが現在の方法を使用しているのか疑問に思います(これはAndroidが非常に優れているものです)で)。

フレームワークに不慣れで、その方法がわからない場合は、多くのチュートリアルがあります。行き詰まったら、ここに来て、問題点を乗り越えるためのヘルプをフォームに尋ねることができます。

于 2012-09-11T14:41:09.537 に答える