Форум программистов, компьютерный форум CyberForum.ru

Использование готовой базы SqLite из ресурсов - Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Android затруднена работа с Эклипсом http://www.cyberforum.ru/android-dev/thread1029462.html
есть три файла с разширениями: -.xml -.java -.java как их объединить в один контейнер для запуска? Eclipce Kepler android
Android Как получить выделенный текст Как получить выделенный текст в TextView по долгому тапу. В идеале, чтобы не выплывало стандартное меню Copy, Select All. Если использовать свое собственное контекстное меню - текст не выделяется. Т.е. нужно реализовать следующий алгоритм: пользователь выделил слово долгим тапом, и оно попало во встроенный словарь сразу. Как это сделать? http://www.cyberforum.ru/android-dev/thread1029405.html
Загрузка образа Android
Добрый день! Есть вопрос. При запуске образа Android с помощью программы Genymotion появляется ошибка. Поделитесь опытом, если кто-нибудь видел что-нибудь подобное. Заранее большое спасибо!
Android Какой использовать элемент экрана для вывода текста?
Здравствуйте. Во вкладке Pallete в Intellij IDEA доступны различные слои, виджеты, контейнеры и т.д. Что из них можно использовать для вывода текста и как? Т.е. в Паскале на основе введенной информации генерируется вывод. Нужно, чтобы в Андроид приложении был элемент экрана схожий с экраном вывода из Паскаль. Нужно, чтобы текст внутри этого "элемента" прокручивался, т.к. текста будет очень...
Android Синтаксис в вызове onTouchEvent из WallpaperService.Engine http://www.cyberforum.ru/android-dev/thread1029212.html
Нужно вызывать метод onTouchEvent(MotionEvent e) из WallpaperService.Engine как это должно выглядеть? и как реализовать интерфейс ZTouchMoveListener, с методом onTouchOffsetChanged(float xOffset) в Канвасе?
Android Определение объекта Всем привет! Рисую на SurfaceView несколько объектов, каждый из них принадлежит отдельному классу. Каким образом определять по касанию какой из объектов выбран для дальнейших манипуляций с ним? Запоминать положение каждого из объектов, а потом перебором сравнивать координаты касания? А если объектов будет 100500? Есть идеи? подробнее

Показать сообщение отдельно
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666

Использование готовой базы SqLite из ресурсов - Android

05.12.2013, 21:35. Просмотров 2106. Ответов 7
Метки (Все метки)

Здравствуйте.

Мне необходимо в приложении использовать готовую базу, но для того чтобы её использовать я копирую её в то место где Android обычно хранит базы и начинаю её использовать. Всё работает хорошо, но есть одно НО. Если я захочу изменить в новой версии приложения готовую базу которую помещу в ресурсах Assets, то мое приложении никак на это не отреагирует. Помогите, мне сделать так, чтобы я как-то мог отслеживать, то, что базу которая в Android хранится необходимо заменить новой базой, так как в ресурсах (в новой версии приложения) она уже поменялась.

Вот код приложения:

Главный MainClass
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import java.util.ArrayList;
 
import android.app.ListActivity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
 
public class IdevOwnSqliteDbActivity extends ListActivity {
 
    //Хорошей практикой является задание имен полей БД константами
    private static final String TABLE_NAME = "friends";
    private static final String FRIEND_ID = "_id";
    private static final String FRIEND_NAME = "name";
 
    private SQLiteDatabase database;
    private ListView listView;
    private ArrayList friends;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        System.out.println(">>>> onCreate(IdevOwnSqliteDbActivity)()");
        
        //Наш ключевой хелпер
        ExternalDbOpenHelper dbOpenHelper = new ExternalDbOpenHelper(this);
//        ExternalDbOpenHelper dbOpenHelper = new ExternalDbOpenHelper(this, DB_NAME);
        database = dbOpenHelper.openDataBase();
        //Все, база открыта!
        fillFreinds();
        setUpList();
    }
 
private void setUpList() {
    
       System.out.println(">>>> setUpList()");
    
    //Используем стандартный адаптер и layout элемента для краткости
    setListAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, friends));
    listView = getListView();
 
    //Подарим себе тост — для души
    listView.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView parent, View view,
                        int position,long id) {
            Toast.makeText(getApplicationContext(),
                        ((TextView) view).getText() +
                         " could be iDev's friend",
                         Toast.LENGTH_SHORT).show();
        }
    });
}
 
//Извлечение элементов из базы данных
private void fillFreinds() {
    
    
       System.out.println(">>>> fillFreinds()");
    
    friends = new ArrayList<String>();
    Cursor friendCursor = database.query(TABLE_NAME,
                                             new String[] {FRIEND_ID, FRIEND_NAME},
                         null, null,null,null,
                                             FRIEND_NAME);
        friendCursor.moveToFirst();
        if(!friendCursor.isAfterLast()) {
            do {
                String name = friendCursor.getString(1);
                friends.add(name);
            } while (friendCursor.moveToNext());
        }
        friendCursor.close();
    }
}
и класс Halper
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
 
import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
 
public class ExternalDbOpenHelper extends SQLiteOpenHelper {
 
    // Путь к папке с базами на устройстве
    private static String DB_PATH = "";
    // Имя файла с базой
    private static final String DB_NAME = "friends.sqlite";
    // версия базы данных
    private static final int DB_VERSION = 1;
    public SQLiteDatabase database;
    public final Context context;
 
    public SQLiteDatabase getDb() {
        System.out.println(">>>> getDb()");
        return database;
    }
 
    public ExternalDbOpenHelper(Context context) {
        super(context, DB_NAME, null, DB_VERSION);// 1? its Database Version
 
        System.out.println(">>>> ExternalDbOpenHelper()");
 
        // Составим полный путь к базам для вашего приложения
        if (android.os.Build.VERSION.SDK_INT >= 4.2) {
            DB_PATH = context.getApplicationInfo().dataDir + "/databases/";
        } else {
            DB_PATH = context.getString(R.string._data_data_)
                    + context.getPackageName() + "/databases/";
        }
        this.context = context;
    }
 
    // Создаст базу, если она не создана
    public void createDataBase() {
 
        System.out.println(">>>> createDataBase()");
 
        boolean dbExist = checkDataBase();
        if (!dbExist) {
            this.getReadableDatabase();
            try {
                copyDataBase();
            } catch (IOException e) {
                Log.e(this.getClass().toString(), "Copying error");
                throw new Error("Error copying database!");
            }
        } else {
            Log.i(this.getClass().toString(), "Database already exists");
        }
    }
 
    // Проверка существования базы данных
    private boolean checkDataBase() {
 
        System.out.println(">>>> checkDataBase()");
 
        File dbFile = new File(DB_PATH + DB_NAME);
        return dbFile.exists();
    }
 
    // Метод копирования базы
    private void copyDataBase() throws IOException {
 
        System.out.println(">>>> copyDataBase()");
 
        // Открываем поток для чтения из уже созданной нами БД
        // источник в assets
        InputStream externalDbStream = context.getAssets().open(DB_NAME);
 
        // Путь к уже созданной пустой базе в андроиде
        String outFileName = DB_PATH + DB_NAME;
 
        // Теперь создадим поток для записи в эту БД побайтно
        OutputStream localDbStream = new FileOutputStream(outFileName);
 
        // Собственно, копирование
        byte[] buffer = new byte[1024];
        int bytesRead;
        while ((bytesRead = externalDbStream.read(buffer)) > 0) {
            localDbStream.write(buffer, 0, bytesRead);
        }
        // закроем потоки
        localDbStream.close();
        externalDbStream.close();
 
    }
 
    public SQLiteDatabase openDataBase() throws SQLException {
 
        System.out.println(">>>> openDataBase()");
 
        String path = DB_PATH + DB_NAME;
        if (database == null) {
            createDataBase();
            database = SQLiteDatabase.openDatabase(path, null,
                    SQLiteDatabase.OPEN_READWRITE);
        }
        return database;
    }
 
    @Override
    public synchronized void close() {
 
        System.out.println(">>>> close()");
 
        if (database != null) {
            database.close();
        }
        super.close();
    }
 
    @Override
    public void onCreate(SQLiteDatabase db) {
 
        System.out.println(">>>> onCreate()");
 
    }
 
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
 
        if (newVersion > oldVersion) {
 
            System.out.println(">>>> onUpgrade - newVersion");
 
        }
 
        System.out.println(">>>> onUpgrade");
 
    }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru