0

私は sqlite データベースを android プロジェクトにインポートする android アプリケーションに取り組んでいます.データベースはエミュレーターで正常に動作しますが、デバイスでアプリを試してみると動作せず、メッセージが出力されます: 残念ながら、appname has停止。

プロジェクトのアセット フォルダーにデータベースを配置し、次のコードを使用してコピーします。

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;

}

}

よろしくお願いします

4

2 に答える 2

0

LogCat を見ないと、エラーが何であるかを推測するのは困難です。

私が同じことを行うアプリを見ると、唯一の違いはコピー機能にあり、操作の順序と追加のメソッドが関係しています。

最後に CopyDB メソッドでこれを試してください。

outputStream.flush(); 
outputStream.close(); 
inputStream.close(); 
于 2012-06-26T12:40:47.650 に答える
0

データベースをインポートSQLiteすることは基本的に悪い考えです。からデータベースを作成する方がよいでしょうraw xml。このチュートリアルが役に立ちます。質問に関しては、アプリケーションのデータを消去/アンインストールするだけでおそらく修正できます。

于 2012-06-26T12:27:05.713 に答える