2015-02-21 7 views
1

Вот код, который я использовал для создания базы данных для приложения. Я поместил этот код в метод init(Object context).не может получить доступ к базе данных в Android-устройстве

boolean created = Database.exists("MyDB.db"); 
      db = Database.openOrCreate("MyDB.db"); 
      if(db == null){ 
       System.out.println("SQLite is not supported on this platform"); 
       return; 
      } 
      if (!created) { 
       db.execute("create table temp (id INTEGER PRIMARY KEY,name text,num double);"); 
       for (int i = 0; i < users.length; i++) { 
        db.execute("insert into temp (name,num) values (?,?);", new String[]{users[i], "" + ages[i]}); 
       } 
      } 

В тренажере он отлично работает. Я могу получить данные из базы данных и выполнить операцию CRUD. Но при установке приложения на устройство Android оно не работает. Я даже не знаю, создается ли база данных или нет.

Я попробовал другой пример. Вот код.

try { 
      boolean isExist = Database.exists("hx.db"); 
      db = Database.openOrCreate("hx.db"); 
      if(db == null) { 
       System.out.println("SQLite is not supported on this platform"); 
       return; 
      } 

      if(!isExist) { 
       db.execute("create table variable_type(id INTEGER PRIMARY KEY, varType TEXT);"); 
       for(int i = 0; i< variable_type.length; i++) { 
        db.execute("insert into variable_type(id, varType) values (?, ?);", new String[]{null, variable_type[i]}); 
       } 
       db.execute("create table uom(id INTEGER PRIMARY KEY, varType TEXT, uom TEXT, uom_system TEXT);"); 
       for(int i = 0; i < uom.length -1; i++) { 
        db.execute("insert into uom(id, varType, uom, uom_system) values (?, ?, ?, ?);", new String[]{null, uom[0], uom[i+1], "NA"}); 
       } 
      } 
     } catch (IOException e1) { 
      e1.printStackTrace(); 
     } 

Ниже метод, используемый для извлечения данных.

public List<String> getUnitTypes() { 
     List<String> unitTypes = new ArrayList<String>(); 
     try { 
      if(Database.exists("hx.db")) 
       db = Database.openOrCreate("hx.db"); 

      Cursor cursor = db.executeQuery("select * from uom;"); 
      while(cursor.next()) { 
       Row r = cursor.getRow(); 
       unitTypes.add(r.getString(2)); 
      } 
     } catch (IOException e) { 
      System.out.println("Exception in reading values;"); 
     } 
     return unitTypes; 
    } 

Вот моя форма, где я использую getUnitTypes() метод.

import java.util.List; 
    import com.codename1.ui.ComboBox; 
    ..... 
    private ComboBox<String> in_dropdown, out_dropdown ; 
    private List<String> unitTypes ; 
    ....... 
    public TemperatureConversion() { 


    in_dropdown = new ComboBox<String>(); 
    in_dropdown.setCommandList(true); 
    in_dropdown.addActionListener(unitChangeListener); 

    out_dropdown = new ComboBox<String>(); 
    out_dropdown.setCommandList(true); 
    out_dropdown.addActionListener(unitChangeListener); 

    unitTypes = AppController.getUnitTypes(); 
    for (int i = 0; i < unitTypes.size(); i++) { 
     out_dropdown.addItem(unitTypes.get(i)); 
     in_dropdown.addItem(unitTypes.get(i)); 
    } 
....... 
} 

ответ

0

Это почти код SQLDemo, который отлично работает на устройствах Android. Единственное, что я могу заметить как различие, это то, что вы использовали метод init(Object), тогда как SQLDemo использовал метод start(). Но я не думаю, что это должно вызвать проблему.

В каком режиме не работает приложение? Не удается ли запустить?

Я предлагаю переместить код в метод start(), обертывая все, что подозревается в try/catch, и помещает метку с ошибкой в ​​форму в случае исключения.

+0

Приложение не сбой, только одна форма, в которой я использовал значения из базы данных в раскрывающемся списке. –

+0

Симулятор показывает правильно. Нет никаких исключений. Я вижу базу данных на рабочем столе. Но как я могу подтвердить, что база данных создана на мобильном устройстве? –

+0

Просто используйте существующий метод в этой форме и войдите на экран или используя Log API. Я сомневаюсь, что первоначально опубликованный фрагмент связан с проблемой. –

0

Я нашел причину наконец. Кажется, проблема с загрузкой базы данных. Я пробовал SQLite для каждой версии Android. Это была успешная версия с аналогичной или более высокой версией API уровня 24. Для использования более низкой версии вам необходимо установить db в подходящий момент.

Подсказка: Пожалуйста установите дб, когда должен быть вызван, и не используйте init() или start() метод для установки децибел для нижней версии Android.

Вместо этого вы можете использовать actionListener() кнопки или что-то еще.

Это должно работать ~!

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