Sugar ORM No such table exception

匿名 (未验证) 提交于 2019-12-03 02:22:01

问题:

Sugar ORM works perfectly on Android <5, but on Android 5> it crashes. I am using version 1.4

Please help me.

Error: android.database.sqlite.SQLiteException: no such table: AUDIO (code 1): , while compiling: SELECT * FROM AUDIO

proguard-rules.pro

-keep class me.lobanov.mp3downloadsfree.models.** { *; } 

My model class:

package me.lobanov.mp3downloadsfree.models;  import com.orm.SugarRecord;  import lombok.Getter; import lombok.Setter; import lombok.ToString;  @Getter @Setter @ToString public class Audio extends SugarRecord {     private long aud_id;     private String aud_artist;     private String aud_title;     private String aud_url;     private long aud_duration;      public Audio() {     }      public Audio(long aud_id, String aud_artist, String aud_title, String aud_url, long aud_duration){         this.aud_id = aud_id;         this.aud_artist = aud_artist;         this.aud_title = aud_title;         this.aud_url = aud_url;         this.aud_duration = aud_duration;     } } 

My application class:

public class App extends SugarApp {     @Override     public void onCreate() {         super.onCreate();     } } 

My manifest:

<meta-data android:name="DATABASE" android:value="mp3downloadsfree.db" />         <meta-data android:name="VERSION" android:value="5" />         <meta-data android:name="QUERY_LOG" android:value="true" />         <meta-data android:name="DOMAIN_PACKAGE_NAME" android:value="me.lobanov.mp3downloadsfree.models" /> 

回答1:

Disabling instant run worked for me.



回答2:

If you already ran your app with sugar and then later you added a model that gives the 'no such table error', then you need to just update(increase) your database VERSION meta in your AndroidManifest.xml. This solves the problem most of the time when instant run is not the issue. Look at the issue HERE For more insight.



回答3:

And after you disable instant run, make sure you uninstall the app from the phone/emulator before running again.



回答4:

I was using version 1.3 and faced same problem. But I solved by using gradle version 1.5 and initializing SugarContext.

In gradle dependencies:

 compile 'com.github.satyan:sugar:1.5'  

In onCreate Method:

 SugarContext.init(this); 


回答5:

please implement hack findById function on your onCreate application class like this

public class App extends SugarApp {     @Override     public void onCreate() {         super.onCreate();          Audio.findById(Audio.class, (long) 1);     } } 

Your audio table will be created



回答6:

The message java.lang.NoSuchTable: means that someone tried to call a constructor without any parameters. Adding a default constructor should solve this problem:

public class User  {     public User() {     }     .. } 


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!