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

Получение коллекции из бд sqlite - Android

Восстановить пароль Регистрация
 
alexmx
0 / 0 / 0
Регистрация: 19.01.2014
Сообщений: 36
27.02.2014, 18:27     Получение коллекции из бд sqlite #1
Доброго времени суток.

Есть класс бд:
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
package ru.myscanner.scannerth;
 
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
 
public class DBHelper extends SQLiteOpenHelper {
    static final String DB_NAME = "my.db";
    static final int DB_VERSION = 1;
    
    //Таблица
    static final String TIME_TABLE = "tiemtable";
    
    //Поля
    static final String TIME_ID = "_id";
    static final String NUM_DET = "numdet";
    static final String COMMAND_G0 = "g0";
    static final String COMMAND_G1 = "g1";
    static final String COMMAND_G94 = "g94";
    static final String COMMAND_G23 = "g23";
    
     // Скрипт создания таблицы
      static final String DB_CREATE = "create table " + TIME_TABLE + "("
          + TIME_ID + " integer primary key autoincrement, "
          + NUM_DET + " string, "
          + COMMAND_G0 + " double, " 
          + COMMAND_G1 + " double, "
          + COMMAND_G94 + " double, "
          + COMMAND_G23 + " double"
          + ");";
    
    public DBHelper(Context context) {
          super(context, DB_NAME, null, DB_VERSION);
        }
    
    @Override
    public void onCreate(SQLiteDatabase db) {
         db.execSQL(DB_CREATE);
    }
 
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS friends");
        onCreate(db);
    }
    
    public  void insert(String numdet, Double g0, Double g1, Double g94, Double g23 ){
        ContentValues values=new ContentValues(2);
        values.put("numdet", numdet);
        values.put("g0", g0);
        values.put("g1", g1);
        values.put("g94", g94);
        values.put("g23", g23);
        getWritableDatabase().insert("tiemtable", "numdet", values);
        
    }
}
есть сервис который запускается из активити.
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
package ru.myscanner.scannerth;
 
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
 
import android.annotation.SuppressLint;
import android.app.Service;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.IBinder;
 
@SuppressLint("SdCardPath")
public class CatalogService extends Service {
 
    
    
    public void onCreate(){
        super.onCreate();
    
    }
    
    public int onStartCommand(Intent intent, int flags, int startId){
        //Описываем работу  таймера  запуска метода  сравнения  массивов
        ScnCatalog();
        return super.onStartCommand(intent, flags, startId);
    }
    
    public void onDestroy(){
        super.onDestroy();
        
    }
 
    @Override
    public IBinder onBind(Intent intent) {
        // TODO Автоматически созданная заглушка метода
        return null;
    }
    DBHelper db = new DBHelper(this);
    SQLiteDatabase database;
    
    public void ScnCatalog(){
        String insbd = null;
         String[] insertBd = null;
         ArrayList<String> listCatalog = null;
         ArrayList<String> listCatalogBd = null;
         listCatalog = getCatalog();
         listCatalogBd = getCatalogBd();
         listCatalog.removeAll(listCatalogBd);
         insertBd = (String[]) listCatalog.toArray();
         for(int i = 0; i <= insertBd.length  - 1; i++) {
                insbd = insertBd[i];
                if(insbd!=null){
                db.insert(insbd, 0.0, 0.0, 0.0, 0.0); 
                }
            }
         //Вставка в бд
        //
        
    }
 
    private ArrayList<String> getCatalogBd() {
        ArrayList<String> forReturnListCatalogBd = new ArrayList<String>();
        String[] scnbdc = null;
        Cursor scndb = database.query(DBHelper.TIME_TABLE, new String[] {DBHelper.TIME_ID, DBHelper.NUM_DET}, null, null, null, null, null);
        String name = null;
        //scndb.moveToFirst();
        while (scndb.moveToNext()) {
            
            name = scndb.getString(scndb.getColumnIndex(DBHelper.NUM_DET));
            
            forReturnListCatalogBd.add(name);
        }
        
         
            
        
        return forReturnListCatalogBd;
    }
 
    private ArrayList<String> getCatalog() {
        ArrayList<String> forReturnListCatalog = new ArrayList<String>();
        String scn = null;
        File MyDir = new File("/mnt/sdcard/");
        String [] FilesInMyDir = MyDir.list();
        for(int i = 0; i <= FilesInMyDir.length  - 1; i++) {
              scn = FilesInMyDir[i];
              forReturnListCatalog.add(scn);
        }
        return forReturnListCatalog;
    }
}
Проблема с Cursor scndb который возвращает null.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.02.2014, 18:27     Получение коллекции из бд sqlite
Посмотрите здесь:

Android SQLite и умножения
Java коллекции Android
ListView + SQLite Android
Кириллица в SQLite Android
Картинка в SQLite Android
AsyncTask и SQLite Android
Категории в SQLite Android
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
27.02.2014, 18:37     Получение коллекции из бд sqlite #2
alexmx, возьмите эмулятор, запустите DDMS, скиньте базу данных на ПК. (data/data/pckg_name/database где-то там вроде) и посмотрите на содержимое с помощью SQLiteBrowser. Для начала
alexmx
0 / 0 / 0
Регистрация: 19.01.2014
Сообщений: 36
27.02.2014, 18:45  [ТС]     Получение коллекции из бд sqlite #3
В базе данные есть, у меня утилита стоит в эклипсе. Причем при запуске активити база дополняется данными как только заполнение прошло отключаюсь db.close(), после чего интентом запускается сервис.
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
27.02.2014, 18:53     Получение коллекции из бд sqlite #4
попробуйте вместо database.query так:

Java
1
Cursor cursor = database.rawQuery("SELECT * FROM " + DBHelper.TIME_TABLE, null);
alexmx
0 / 0 / 0
Регистрация: 19.01.2014
Сообщений: 36
27.02.2014, 19:04  [ТС]     Получение коллекции из бд sqlite #5
Переделал:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private ArrayList<String> getCatalogBd() {
        ArrayList<String> forReturnListCatalogBd = new ArrayList<String>();
        String[] scnbdc = null;
        Cursor cursor = database.rawQuery("SELECT * FROM " + DBHelper.TIME_TABLE, null);
        String name = null;
        cursor.moveToFirst();
        while (cursor.moveToNext()) {
            
            name = cursor.getString(cursor.getColumnIndex(DBHelper.NUM_DET));
            
            forReturnListCatalogBd.add(name);
        }
        
         
            
        
        return forReturnListCatalogBd;
    }
Проблема осталась.
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
27.02.2014, 19:14     Получение коллекции из бд sqlite #6
alexmx, есть конечно ещё вариант. Может разные контексты БД?
Java
1
2
3
4
5
6
public class TheApplication extends Application {
    private static TheApplication sApplication;
    public static TheApplication getInstance() {
        return sApplication;
    }
}
добавляем его в манифест

XML
1
<application android:name=".TheApplication"
и используйте его при вызове
Java
1
public DBHelper(Context context)
Цитата Сообщение от alexmx Посмотреть сообщение
"create table "
create table if not exists.
alexmx
0 / 0 / 0
Регистрация: 19.01.2014
Сообщений: 36
27.02.2014, 20:27  [ТС]     Получение коллекции из бд sqlite #7
Не совсем Вас понял

Добавлено через 1 час 3 минуты
С курсором решил проблема была в отсутствии подключения дб добавил:
Java
1
database = db.getWritableDatabase();
Лог:
02-27 15:33:12.453: E/AndroidRuntime(23711): FATAL EXCEPTION: main
02-27 15:33:12.453: E/AndroidRuntime(23711): java.lang.RuntimeException: Unable to start service ru.myscanner.scannerth.CatalogService@b5763360 with Intent { cmp=ru.myscanner.scannerth/.CatalogService }: java.lang.ClassCastException: java.lang.Object[] cannot be cast to java.lang.String[]
02-27 15:33:12.453: E/AndroidRuntime(23711): at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2507)
02-27 15:33:12.453: E/AndroidRuntime(23711): at android.app.ActivityThread.access$1900(ActivityThread.java:130)
02-27 15:33:12.453: E/AndroidRuntime(23711): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292)
02-27 15:33:12.453: E/AndroidRuntime(23711): at android.os.Handler.dispatchMessage(Handler.java:99)
02-27 15:33:12.453: E/AndroidRuntime(23711): at android.os.Looper.loop(Looper.java:137)
02-27 15:33:12.453: E/AndroidRuntime(23711): at android.app.ActivityThread.main(ActivityThread.java:4745)
02-27 15:33:12.453: E/AndroidRuntime(23711): at java.lang.reflect.Method.invokeNative(Native Method)
02-27 15:33:12.453: E/AndroidRuntime(23711): at java.lang.reflect.Method.invoke(Method.java:511)
02-27 15:33:12.453: E/AndroidRuntime(23711): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
02-27 15:33:12.453: E/AndroidRuntime(23711): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
02-27 15:33:12.453: E/AndroidRuntime(23711): at dalvik.system.NativeStart.main(Native Method)
02-27 15:33:12.453: E/AndroidRuntime(23711): Caused by: java.lang.ClassCastException: java.lang.Object[] cannot be cast to java.lang.String[]
02-27 15:33:12.453: E/AndroidRuntime(23711): at ru.myscanner.scannerth.CatalogService.ScnCatalog(CatalogService.java:51)
02-27 15:33:12.453: E/AndroidRuntime(23711): at ru.myscanner.scannerth.CatalogService.onStartCommand(CatalogService.java:26)
02-27 15:33:12.453: E/AndroidRuntime(23711): at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2490)
02-27 15:33:12.453: E/AndroidRuntime(23711): ... 10 more
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
27.02.2014, 20:51     Получение коллекции из бд sqlite #8
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от alexmx Посмотреть сообщение
java.lang.ClassCastException: java.lang.Object[] cannot be cast to java.lang.String[]
Java
1
 insertBd = listCatalog.toArray(new String[listCatalog.size()]);
попробуйте вместо insertBd = (String[]) listCatalog.toArray();
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.02.2014, 21:17     Получение коллекции из бд sqlite
Еще ссылки по теме:

Android RecyclerView и SQLite
Listener SQLite Android
Android SQLite и android
RecyclerView и SQLite Android
Android Не создается DB SQLite

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
alexmx
0 / 0 / 0
Регистрация: 19.01.2014
Сообщений: 36
27.02.2014, 21:17  [ТС]     Получение коллекции из бд sqlite #9
Все работает спасибо)))
Единственно хотелось бы еще спросить возможно ли создать два файла бд?
Yandex
Объявления
27.02.2014, 21:17     Получение коллекции из бд sqlite
Ответ Создать тему
Опции темы

Текущее время: 00:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru