Android:Sugar ORM没有这样的表格例外

She*_*lji 38 sqlite android gpuimage sugarorm

No Such table当我使用Sugar ORMGPU图像Android库时,我得到了例外.我正在使用Gradle和Android Studio.一旦我删除GPU图像这个问题就解决了.所以我不知道什么导致这个例外.关于这个例外的细节也在这个git问题中讨论, 似乎很多人仍然面临着这个问题.

我的崩溃日志发布在下面

> 10-09 11:30:21.511 4326-4831/com.example.app E/SQLiteLog: (10) Failed
> to do file read, got: 0, amt: 100, last Errno: 2 10-09 11:30:26.506
> 4326-4831/com.example.app E/SQLiteLog: (1) no such table: IMAGE 10-09
> 11:30:26.516 4326-4831/com.example.app E/AndroidRuntime: FATAL
> EXCEPTION: AsyncTask #1 10-09 11:30:26.516 4326-4831/com.example.app
> E/AndroidRuntime: java.lang.RuntimeException: An error occured while
> executing doInBackground() 10-09 11:30:26.516
> 4326-4831/com.example.app E/AndroidRuntime:     at
> android.os.AsyncTask$3.done(AsyncTask.java:299) 10-09 11:30:26.516
> 4326-4831/com.example.app E/AndroidRuntime:     at
> java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
> 10-09 11:30:26.516 4326-4831/com.example.app E/AndroidRuntime:     at
> java.util.concurrent.FutureTask.setException(FutureTask.java:219)
> 10-09 11:30:26.516 4326-4831/com.example.app E/AndroidRuntime:     at
> java.util.concurrent.FutureTask.run(FutureTask.java:239) 10-09
> 11:30:26.516 4326-4831/com.example.app E/AndroidRuntime:     at
> android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 10-09
> 11:30:26.516 4326-4831/com.example.app E/AndroidRuntime:     at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
> 10-09 11:30:26.516 4326-4831/com.example.app E/AndroidRuntime:     at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
> 10-09 11:30:26.516 4326-4831/com.example.app E/AndroidRuntime:     at
> java.lang.Thread.run(Thread.java:838) 10-09 11:30:26.516
> 4326-4831/com.example.app E/AndroidRuntime:  Caused by:
> android.database.sqlite.SQLiteException: no such table: IMAGE (code
> 1): , while compiling: SELECT * FROM IMAGE 10-09 11:30:26.516
> 4326-4831/com.example.app E/AndroidRuntime:     at
> android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native
> Method) 10-09 11:30:26.516 4326-4831/com.example.app E/AndroidRuntime:
> at
> android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:886)
> 10-09 11:30:26.516 4326-4831/com.example.app E/AndroidRuntime:     at
> android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:497)
> 10-09 11:30:26.516 4326-4831/com.example.app E/AndroidRuntime:     at
> android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
> 10-09 11:30:26.516 4326-4831/com.example.app E/AndroidRuntime:     at
> android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
> 10-09 11:30:26.516 4326-4831/com.example.app E/AndroidRuntime:     at
> android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37) 10-09
> 11:30:26.516 4326-4831/com.example.app E/AndroidRuntime:     at
> android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
> 10-09 11:30:26.516 4326-4831/com.example.app E/AndroidRuntime:     at
> android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1314)
> 10-09 11:30:26.516 4326-4831/com.example.app E/AndroidRuntime:     at
> android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1161)
> 10-09 11:30:26.516 4326-4831/com.example.app E/AndroidRuntime:     at
> android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1032)
> 10-09 11:30:26.516 4326-4831/com.example.app E/AndroidRuntime:     at
> android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1238)
Run Code Online (Sandbox Code Playgroud)

Mic*_*ele 96

我有同样的问题,它与Instant Run有关.禁用即时运行,重新安装应用程序,它的工作原理.

有关如何启用或禁用"即时运行"的详细信息,请参阅此链接.

  • 我必须禁用并重新安装该应用程序. (7认同)
  • 禁用即时运行并重新安装应用程序 - 仅禁用该功能是不够的. (3认同)

Par*_*ora 67

如果您使用的是Android Studio 2.0

有同样的问题!

因此,即时运行与Sugar ORM不兼容

  • 开放式设置
  • 在此输入图像描述
  • 现在运行你的项目

请享用!


far*_*bel 31

我面临同样的问题.禁用"即时运行"并没有解决问题.我也没有启用proguard.后来我从android清单中删除了所有的sugarORM元数据(查询日志除外),解决了这个问题.所以从android清单中删除以下3行:

    <meta-data android:name="DATABASE" android:value="edikodik.db" />
    <meta-data android:name="VERSION" android:value="2" />
    <meta-data android:name="QUERY_LOG" android:value="true" /> 
Run Code Online (Sandbox Code Playgroud)

编辑: 根据jrhamza的评论,如果上述解决方案不起作用,请尝试禁用即时运行.


小智 16

我正在使用1.5版本,并尝试了很多方法,但没有工作.

我找到了解决方案!

这将强制在启动应用程序时创建表:

public class SugarOrmTestApplication extends SugarApp {
    @Override
    public void onCreate() {
        super.onCreate();
        SugarContext.init(getApplicationContext());

        // create table if not exists
        SchemaGenerator schemaGenerator = new SchemaGenerator(this);
        schemaGenerator.createDatabase(new SugarDb(this).getDB());
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
    }

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

    @Override
    public void onTerminate() {
        super.onTerminate();
        SugarContext.terminate();
    }
}
Run Code Online (Sandbox Code Playgroud)


hoa*_*gdv 14

如果在代码中添加新模型(新表),则需要在Manifest文件中更改数据库版本.新值>旧值(更新)

 <meta-data
            android:name="VERSION"
            android:value="1"/>
Run Code Online (Sandbox Code Playgroud)

  • 这不是问题.它不是出于某种原因创建表. (4认同)

Sac*_*agi 10

我也遇到过这个问题.在猎杀了2天后,我通过以下技巧解决了它在android studio中

步骤1. 在app的build.gradle文件中编写'com.github.satyan:sugar:1.5'编译器

步骤2. 在项目的build.gradle文件的依赖项中编写类路径'com.android.tools.build:gradle:2.1.0'

步骤3.数据库版本应大于1,始终如sugarORM中所述


小智 8

禁用您的即时运行转到文件>设置>构建,执行,部署>即时运行


Mar*_*uza 7

解决

我不知道但是没有调用SugarDb.onCreate.因此,将此代码放在MainActivity.onCreate中,Sugar ORM将起作用

    SugarDb db = new SugarDb(this);
    db.onCreate(db.getDB());
Run Code Online (Sandbox Code Playgroud)


New*_*ser 6

要创建模型表,我会在应用程序启动后对所有模型执行此操作:

Book.findById(Book.class, (long) 1);
Car.findById(Car.class, (long) 1);
Run Code Online (Sandbox Code Playgroud)

我的应用程序扩展了SugarApp,因此这会强制Sugar创建所有表.

另一方面,要更新数据库,必须将版本更改为2.

最后,拥有一个空构造函数是必须的.

希望这可以帮助!;)


Hus*_*syn 5

我也遇到了这个问题,我的类只有 1 个 String 属性。我用的是1.3版本。只需注释AndroidManifest.xml文件中的这段代码就可以了:)

<meta-data
 android:name="DOMAIN_PACKAGE_NAME"
 android:value="com.project.database.entities" />
Run Code Online (Sandbox Code Playgroud)

参考:

https://github.com/satyan/sugar/issues/75


小智 5

就我而言,我从AndroidManifest.xml中删除了以下行,它可以正常工作!

在此处输入图片说明