问题
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() {
}
..
}
来源:https://stackoverflow.com/questions/35792152/sugar-orm-no-such-table-exception