2016-12-20 2 views
0

Я пытаюсь создать приложение, которое проверяет дату, ссылается на время, когда солнце садится из предварительно загруженной базы данных, и выдает предупреждение за 90 минут до этого. Менее конкретно (и, вероятно, более релевантный для вас), я пытаюсь закодировать приложение, которое поставляется с предварительно заполненной базой данных, доступной по мере необходимости. Существует несколько руководств по использованию SQLite в Android-разработке, но все они предполагают, что вы создаете базу данных во время работы приложения и пытаетесь ввести определяемые пользователем данные; единственный учебник, который я нашел, был с 2009 года, и с тех пор появились некоторые обновления, которые делают это непригодным (я думаю, что, конечно, он не будет работать в Android Studio). Все остальные вопросы об этом только что были отмечены как дубликаты и ссылались на очень старый вопрос, на который ответил, как вы уже догадались, тот же устаревший учебник. This - это учебник, о котором я говорю, если он вообще помогает; не знаю, что будет, но может.Пытается предварительно загрузить базу данных SQLite в Android-приложение

Редактировать: Зачем закрывать его? Я упомянул в своем вопросе, что на этот вопрос был дан ответ технически, но все ссылки ссылаются на один устаревший, неуместный учебник, который вообще не помогает. Возможно, вопрос был задан раньше, но ответ был изменен.

ответ

1

Use SQLiteAssetHelper. Вы добавляете одну библиотеку, создаете подкласс SQLiteAssetHelper (вместо обычного SQLiteOpenHelper) и помещаете свою базу данных в assets/.

Так, например, в this sample app, я добавить библиотеку в app/build.gradle:

compile 'com.readystatesoftware.sqliteasset:sqliteassethelper:2.0.1' 

Мои DatabaseHelper расширяет SQLiteAssetHelper:

/*** 
    Copyright (c) 2008-2012 CommonsWare, LLC 
    Licensed under the Apache License, Version 2.0 (the "License"); you may not 
    use this file except in compliance with the License. You may obtain a copy 
    of the License at http://www.apache.org/licenses/LICENSE-2.0. Unless required 
    by applicable law or agreed to in writing, software distributed under the 
    License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
    OF ANY KIND, either express or implied. See the License for the specific 
    language governing permissions and limitations under the License. 

    From _The Busy Coder's Guide to Android Development_ 
    https://commonsware.com/Android 
*/ 

package com.commonsware.android.dbasset; 

import android.content.Context; 
import com.readystatesoftware.sqliteasset.SQLiteAssetHelper; 

class DatabaseHelper extends SQLiteAssetHelper { 
    static final String TITLE="title"; 
    static final String VALUE="value"; 
    static final String TABLE="constants"; 
    private static final String DATABASE_NAME="constants.db"; 

    public DatabaseHelper(Context context) { 
    super(context, DATABASE_NAME, null, 1); 
    } 
} 

И моя база данных is in app/src/main/assets/databases/.

Все остальное оттуда точно так же, как и обычное использование SQLite в Android. Ваша база данных автоматически распаковывается из активов при первом запуске вашего приложения.

+0

Хорошо, да, это работает очень хорошо. Думаю, мне следовало бы взглянуть за коробку немного больше. Быстрый вопрос уточнения, потому что я немного новичок в Android, где я поместил файл SQLiteAssetHelper после его загрузки и разархивирования? – Jacob

+0

@Jacob: «Где я могу поместить файл SQLiteAssetHelper после его загрузки и разархивировать?» -Я не понимаю, что ты имеешь ввиду. 'SQLiteAssetHelper', класс Java, поступает из библиотеки. Вы добавляете библиотеку в файл 'build.gradle' вашего модуля, предполагая, что вы используете Android Studio. Если вы загрузили репозиторий GitHub для 'SQLiteAssetHelper', в то время как вы можете это сделать, это не нужно, если только вы не открываете библиотеку. – CommonsWare

+0

Ох. Duh. Ничего, я болен и, следовательно, испорчен. – Jacob

Смежные вопросы