Sugar ORM 没有这样的 table 异常
Sugar ORM No such table exception
Sugar ORM 在 Android <5 上完美运行,但在 Android 5> 上它崩溃了。
我使用的是 1.4
版本
请帮帮我。
错误:android.database.sqlite.SQLiteException: no such table: AUDIO (code 1): , while compiling: SELECT * FROM AUDIO
proguard-rules.pro
-keep class me.lobanov.mp3downloadsfree.models.** { *; }
我的模型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;
}
}
我的申请class:
public class App extends SugarApp {
@Override
public void onCreate() {
super.onCreate();
}
}
我的清单:
<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" />
请像这样在您的 onCreate 应用程序 class 上实现 hack findById 函数
public class App extends SugarApp {
@Override
public void onCreate() {
super.onCreate();
Audio.findById(Audio.class, (long) 1);
}
}
您的音频 table 将被创建
禁用即时 运行 对我有用。
如果您已经 运行 您的应用程序添加了 sugar 然后您添加了一个提供 'no such table error' 的模型,那么您只需要更新(增加)您的 [= 中的数据库 VERSION 元数据14=]。这在大多数情况下解决了即时 运行 不是问题的问题。看问题HERE
了解更多信息。
消息java.lang.NoSuchTable:表示有人试图调用不带任何参数的构造函数。添加默认构造函数应该可以解决这个问题:
public class User
{
public User() {
}
..
}
并且在禁用即时 运行 后,确保在再次 运行ning 之前从 phone/emulator 卸载该应用程序。
我使用的是 1.3 版,遇到了同样的问题。
但我通过使用 gradle 1.5 版并初始化 SugarContext 解决了问题。
在gradle依赖项中:
compile 'com.github.satyan:sugar:1.5'
在 onCreate 方法中:
SugarContext.init(this);
Sugar ORM 在 Android <5 上完美运行,但在 Android 5> 上它崩溃了。 我使用的是 1.4
版本请帮帮我。
错误:android.database.sqlite.SQLiteException: no such table: AUDIO (code 1): , while compiling: SELECT * FROM AUDIO
proguard-rules.pro
-keep class me.lobanov.mp3downloadsfree.models.** { *; }
我的模型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;
}
}
我的申请class:
public class App extends SugarApp {
@Override
public void onCreate() {
super.onCreate();
}
}
我的清单:
<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" />
请像这样在您的 onCreate 应用程序 class 上实现 hack findById 函数
public class App extends SugarApp {
@Override
public void onCreate() {
super.onCreate();
Audio.findById(Audio.class, (long) 1);
}
}
您的音频 table 将被创建
禁用即时 运行 对我有用。
如果您已经 运行 您的应用程序添加了 sugar 然后您添加了一个提供 'no such table error' 的模型,那么您只需要更新(增加)您的 [= 中的数据库 VERSION 元数据14=]。这在大多数情况下解决了即时 运行 不是问题的问题。看问题HERE 了解更多信息。
消息java.lang.NoSuchTable:表示有人试图调用不带任何参数的构造函数。添加默认构造函数应该可以解决这个问题:
public class User
{
public User() {
}
..
}
并且在禁用即时 运行 后,确保在再次 运行ning 之前从 phone/emulator 卸载该应用程序。
我使用的是 1.3 版,遇到了同样的问题。 但我通过使用 gradle 1.5 版并初始化 SugarContext 解决了问题。
在gradle依赖项中:
compile 'com.github.satyan:sugar:1.5'
在 onCreate 方法中:
SugarContext.init(this);