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);