0

これは、この質問に対するフォローアップの質問です。

Android.com からこのチュートリアルを読んでいて、チュートリアルに従ってこのコードを作成しました。

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.provider.BaseColumns;

public final class SongDbHelper extends SQLiteOpenHelper {
    // If you change the database schema, you must increment the database version.
    public static final int DATABASE_VERSION = 1;
    public static final String DATABASE_NAME = "Song.db";
    private static final String TEXT_TYPE = " TEXT";
    private static final String PRIMARY_KEY_TYPE = " INTEGER PRIMARY KEY";
    private static final String COMMA_SEP = ",";
    private static final String SQL_CREATE_ENTRIES =
            "CREATE TABLE " + SongEntry.TABLE_NAME + " (" +
                    SongEntry._ID + PRIMARY_KEY_TYPE + COMMA_SEP +
                    SongEntry.COLUMN_NAME_SONG_TITLE + TEXT_TYPE + COMMA_SEP +
                    SongEntry.COLUMN_NAME_ENGLISH_LYRICS + TEXT_TYPE + COMMA_SEP +
                    SongEntry.COLUMN_NAME_ROMAJI_LYRICS + TEXT_TYPE + COMMA_SEP +
                    SongEntry.COLUMN_NAME_KANJI_LYRICS + TEXT_TYPE + COMMA_SEP +
                    SongEntry.COLUMN_NAME_INFO + TEXT_TYPE +
            " )";
    private static final String SQL_DELETE_ENTRIES =
            "DROP TABLE IF EXISTS " + SongEntry.TABLE_NAME;

    public SongDbHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(SQL_CREATE_ENTRIES);
    }
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // This database is only a cache for online data, so its upgrade policy is
        // to simply to discard the data and start over
        db.execSQL(SQL_DELETE_ENTRIES);
        onCreate(db);
    }
    public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        onUpgrade(db, oldVersion, newVersion);
    }


    public static abstract class SongEntry implements BaseColumns {
        public static final String TABLE_NAME = "Song";
        public static final String COLUMN_NAME_SONG_TITLE = "song_title";
        public static final String COLUMN_NAME_ENGLISH_LYRICS = "english_lyrics";
        public static final String COLUMN_NAME_ROMAJI_LYRICS = "romaji_lyrics";
        public static final String COLUMN_NAME_KANJI_LYRICS = "kanji_lyrics";
        public static final String COLUMN_NAME_INFO = "info";

    }
}

アプリを Google Play ストアに公開し、ユーザーがアプリをインストールすると、SongDbHelper.onCreate()自動的に呼び出され、Songテーブルを使用してデータベースが作成されます。このデータベースはどのようにして値で満たされるのでしょうか? SongDbHelper.onCreate()メソッドにデータを入力するコードを書く必要があると思います。つまり、データをソース コードのどこかに保存する必要があります。

歌詞をstrings.xmlファイルに保存しようと思ったのですが、冗長に思えます。次に、歌詞がstrings.xmlファイルデータベースに保存されます。SELECTその場合、データを呼び出してフィルター処理する必要がない限り、データベースはほとんど必要ありません。これは本当に人々がデータベースに入力する方法ですか?

理想的には、自分でデータベースを埋めてから、ユーザーにアプリ ストアからデータベースをダウンロードしてもらいたいと考えています。そんなことはできないと人々は言います。それは本当に本当ですか?データを 2 つの場所 (データベースと)に置くのはもったいないようです。 strings.xmlたくさんのデータがあるかもしれません!

ほとんどの人は、アプリでインターネット サーバーからデータベースをダウンロードしていますか? 公開したすべてのアプリにインターネット サーバーを用意する必要はなく、Google Play でデータベースをホストするだけで済みます。

4

2 に答える 2

1

はい、プリロードされたデータが必要な場合は、それらをアセットまたはリソースとしてアプリに含める必要があります。それは確かにスペースの2倍になります。

しかし、これは通常、インターネットに接続していなくても最初の起動のデータを取得し、後でインターネット経由で新しいデータや更新されたデータを追加するために使用されます。

サーバーにお金を払いたくない場合: 無料で、 Gogle App Engineで Web サイトを取得できます。xml ファイルまたは画像を保存するだけであれば、かなり簡単です。

于 2015-06-29T12:33:33.317 に答える
1

いっぱいになったデータベースを含めることができ、これが役立つかもしれません: データベースを含むアプリケーションを出荷するassetsフォルダーに配置された任意のファイルが APK に含まれるため、独自のサーバーやダウンロードなどを実行する必要はありません。

(ただし、APK が 50 MB を超える場合は、何らかのダウンロードを処理する必要があります。このために、Google は拡張ファイルシステムを提供しているため、独自の Web サーバーは必要ありません。)

そして、より単純なケースでは、あなたが読んだチュートリアルのように、いくつかのinsertクエリを で実行するのが一般的な方法だと思います。onCreate

于 2015-06-29T12:33:48.727 に答える