相关疑难解决方法(0)

如何在Android应用程序中使用现有数据库

我已经创建了一个SQLite数据库.我想在我的Android项目中使用这个数据库文件.我想将此数据库与我的应用程序捆绑在一起.

应用程序如何才能访问此数据库并将其用作数据库,而不是创建新数据库?

java eclipse sqlite android

317
推荐指数
4
解决办法
20万
查看次数

在Android中管理SQLite连接

关于在Android中处理SQLite数据库连接,我有一个(希望)快速的问题.我有一个自然地由几个活动组成的应用程序.我创建/更新/查询数据库没有问题,因为我已经创建了一个专用的类来通过SQLiteOpenHelper等来处理这项工作.

我的问题是:由于这些活动都共享同一个数据库,这通常是作为单个静态成员实现的,还是每个活动都拥有自己的连接?我当然关心的是每次活动中重新连接数据库的成本.

或者换句话说,有没有理由不存储单例实例?

我也想知道幕后是否有类似于.NET连接池的事情,以降低打开连接的成本.

提前致谢!

architecture sqlite android

18
推荐指数
2
解决办法
8779
查看次数

Android SQLite数据库已损坏

此链接完全描述了我的问题:http://old.nabble.com/Android-database-corruption-td28044218.html#a28044218

现在大约有300人使用我的Android应用程序,每次使用此堆栈跟踪向服务器发送崩溃报告:

android.database.sqlite.SQLiteDatabaseCorruptException: database disk image is malformed
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2596)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2621)
    at android.app.ActivityThread.access$2200(ActivityThread.java:126)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1932)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:123)
    at android.app.ActivityThread.main(ActivityThread.java:4595)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:521)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
    at dalvik.system.NativeStart.main(Native Method) Caused by: android.database.sqlite.SQLiteDatabaseCorruptException: database disk image is malformed
    at android.database.sqlite.SQLiteQuery.native_fill_window(Native Method)
    at android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:75)
    at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:295)
    at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:276)
    at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:171)
    at android.database.AbstractCursor.moveToFirst(AbstractCursor.java:248)
Run Code Online (Sandbox Code Playgroud)

结果是应用程序崩溃并且数据库中的所有数据都丢失了.

需要注意的一点是,每当我读取或写入数据库时​​,我都会得到一个新的SQLiteDatabase,并在完成后立即将其关闭.我这样做是为了防止这种腐败错误.

我还尝试使用单个静态对象同步所有数据库读取和写入,这似乎没有帮助.

这可能只是一个SQLite错误吗?

我在此处发现了与内置电子邮件应用程序类似的错误:http://code.google.com/p/android/issues/detail?id = 5610.

这是我的代码:

public class KeyValueTableAdapter extends BaseTableAdapter {

    private String tableName;
    private …
Run Code Online (Sandbox Code Playgroud)

sqlite android

9
推荐指数
2
解决办法
2万
查看次数

Android ApplicationTestCase使用MockContext

我是Android测试的新手,我正在尝试使用MockContext创建一个ApplicationTestCase(实际上我正在尝试使用重命名模拟上下文).但我不断收到AssertionFailedError.到目前为止,这是我的基本代码:

AppTests.java

package com.myProject.test;

import android.test.ApplicationTestCase;

public class AppTests extends ApplicationTestCase<MyApplication> {
    public AppTests() {
        super(MyApplication.class);
    }

    @Override
    protected void setUp() throws Exception {
        final RenamingMockContext mockContext = new RenamingMockContext(getContext());
        setContext(mockContext);
        createApplication();
    }

}
Run Code Online (Sandbox Code Playgroud)

MyApplication.java

package com.myProject.test;

import android.app.Application;

public class MyApplication extends Application {

    public MyApplication() {
    }

    @Override
    public void onCreate() {
        super.onCreate();
    }

}
Run Code Online (Sandbox Code Playgroud)

RenamingMockContext.java

package com.myProject.test;

import android.content.Context;
import android.content.SharedPreferences;
import android.test.RenamingDelegatingContext;
import android.test.mock.MockContext;

public class RenamingMockContext extends RenamingDelegatingContext {

    private static final String PREFIX = …
Run Code Online (Sandbox Code Playgroud)

android unit-testing mocking android-context

7
推荐指数
1
解决办法
2万
查看次数

每次操作数据时是否需要调用getWritableDatabase()

我有一个关于android中的sqlite数据库的新手问题:

每次操作数据时,我是否真的需要检索可写数据库?

那么我可以像这样写一个DAO:

class Dao {

        private final SQLiteDatabase database;

        public Dao(SQLiteOpenHelper databaseHelper){

             database = databaseHelper.getWritableDatabase();
    }

    public void insert(...){

       ContentValues cv = new ContentValues(4);
       database.insertOrThrow(TABLE, null, cv);
       ...
    }


    public void update(...){
        ContentValues cv = new ContentValues(4);
        database.update(....);
    }
}
Run Code Online (Sandbox Code Playgroud)

或者我必须像这样写我的道:

class Dao {

        private final SQLiteOpenHelper databaseHelper;

        public Dao(SQLiteOpenHelper databaseHelper){

             this.databaseHelper = databaseHelper
    }

    public void insert(...){

       SQLiteDatabase database = databaseHelper.getWritableDatabase();
       ContentValues cv = new ContentValues(4);
       database.insertOrThrow(TABLE, null, cv);
       ...
    }


    public void update(...){
        SQLiteDatabase database = databaseHelper.getWritableDatabase(); …
Run Code Online (Sandbox Code Playgroud)

sqlite android

7
推荐指数
1
解决办法
2万
查看次数