2012-06-26 3 views
0

Я работаю над приложением android, где я импортирую базу данных sqlite в проект Android. База данных отлично работает на эмуляторе, но когда я пытаюсь использовать приложение на моем устройстве он не работает и выводит сообщение: К сожалению, appname остановлено.База данных SQLite, работающая на моем эмуляторе и не работающая с моим устройством

Я положил свою базу данных в папке активов в моем проекте затем использовать этот код, чтобы скопировать его: функция

try {   
    String destPath = "/data/data/" + getPackageName() + "/databases/MyDB"; 
    File f = new File(destPath);    
    if (!f.exists()) {   
     CopyDB(getBaseContext().getAssets().open("mydb"), 
       new FileOutputStream(destPath)); 
    } 
} catch (FileNotFoundException e) {   
    e.printStackTrace(); 

} catch (IOException e) { 
    e.printStackTrace(); 
} 

COPYDB:

public void CopyDB(InputStream inputStream, OutputStream outputStream) 
    throws IOException { 
    //---copy 1K bytes at a time--- 
    byte[] buffer = new byte[1024]; 
    int length; 
    while ((length = inputStream.read(buffer)) > 0) { 
     outputStream.write(buffer, 0, length); 
    } 
    inputStream.close(); 
    outputStream.close(); 
} 

DBAdapter Класс:

public class DBAdapter { 
public static final String KEY_ROWID = "_id"; 
public static final String KEY_NAME = "username"; 
public static final String KEY_PASSWORD = "password"; 


private static final String DATABASE_NAME = "MyDB"; 
private static final String DATABASE_TABLE = "users"; 
private static final int DATABASE_VERSION = 4; 



private final Context context;  

private DatabaseHelper DBHelper; 
private SQLiteDatabase db; 

public DBAdapter(Context ctx) 
{ 
    this.context = ctx; 
    DBHelper = new DatabaseHelper(context); 
} 

private static class DatabaseHelper extends SQLiteOpenHelper 
{ 
    DatabaseHelper(Context context) 
    { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) 
    { 

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
    { 

    } 
}  

//---opens the database--- 
public DBAdapter open() throws SQLException 
{ 
    db = DBHelper.getWritableDatabase(); 
    return this; 
} 

//---closes the database---  
public void close() 
{ 
    DBHelper.close(); 
} 


//---retrieves all the users--- 
public Cursor getAllusers() 
{ 
    return db.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_NAME, 
      KEY_PASSWORD}, null, null, null, null, null); 
} 

//---retrieves a particular user--- 
public User getuser(String username) throws SQLException 
{ 

    Cursor mCursor = 
      db.query(true, DATABASE_TABLE, new String[] {KEY_ROWID, 
      KEY_NAME, KEY_PASSWORD}, KEY_NAME + "=" + "'"+username+ "'", null, 
      null, null, null, null); 
    if(mCursor.moveToFirst()) 
    { 
     mCursor.moveToFirst(); 
     User u=new User(Integer.valueOf(mCursor.getString(0)),mCursor.getString(1),mCursor.getString(2)); 
     return u; 
    }else 
     return null; 

} 

}

Большое вам спасибо

+0

сообщение The LogCat показывает ошибку. – Barak

+0

Как проверить logcat во время запуска приложения на устройстве? –

+0

Я попробовал запустить приложение на эмуляторе с более новой версией Android (android 4), как и мой мобильный. Теперь он не работает над новым эмулятором! –

ответ

0

Импорт SQLite базы данных в основном плохая идея. Вам лучше создать базу данных с raw xml. Это должно помочь tutorial. Что касается вопроса, вы можете исправить его, просто очистив данные/удалив приложение.

+0

Я удалил приложение, а затем снова установил его, но ничего не изменилось ... Мне нужно иметь базу данных в моем приложении –

+0

Я попытался запустить приложение на эмуляторе с более новой версией Android (android 4), как и мой мобильный .. it теперь не работает над новым эмулятором! –

+0

@ MustafaAbdel-Khalik Хорошо, пожалуйста, разместите полный логарифм (выберите каждую строку logcat и скопируйте их с помощью crtl + C) вместо снимка экрана. –

0

Не видя своего LogCat, сложно догадаться, что такое ошибка.

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

Попробуйте это в методе COPYDB в конце:

outputStream.flush(); 
outputStream.close(); 
inputStream.close(); 
+0

Я пробовал, но все еще не работал –

+0

Опубликуйте LogCat, чтобы мы могли видеть, какая ошибка сообщается. – Barak

+0

Я попробовал приложение на новом эмуляторе (Android 4) с той же версией своего устройства. Теперь он не работает как с эмулятором, так и с устройством logcat: http://imageshack.us/photo/my-images/ 9/logcatt.png/ –

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