She*_*lji 38 sqlite android gpuimage sugarorm
No Such table
当我使用Sugar ORM和GPU图像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)
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)
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中所述
解决
我不知道但是没有调用SugarDb.onCreate.因此,将此代码放在MainActivity.onCreate中,Sugar ORM将起作用
SugarDb db = new SugarDb(this);
db.onCreate(db.getDB());
Run Code Online (Sandbox Code Playgroud)
要创建模型表,我会在应用程序启动后对所有模型执行此操作:
Book.findById(Book.class, (long) 1);
Car.findById(Car.class, (long) 1);
Run Code Online (Sandbox Code Playgroud)
我的应用程序扩展了SugarApp,因此这会强制Sugar创建所有表.
另一方面,要更新数据库,必须将版本更改为2.
最后,拥有一个空构造函数是必须的.
希望这可以帮助!;)
我也遇到了这个问题,我的类只有 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)
参考:
归档时间: |
|
查看次数: |
33700 次 |
最近记录: |