2016-03-04 23 views
3

糖ORM完美的作品在Android < 5,但在Android上5>崩溃。 我使用的1.4版糖ORM没有这样的表外

请帮助我。

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

proguard-rules.pro

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

我的模型类:

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

我的应用程序类:

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" /> 
+0

你找到一个解决办法? 我一直在使用糖有一段时间了,它只是开始给这个错误,似乎一切都很好,所有的配置都正确,每个糖类具有公共默认构造函数 –

+0

我写我自己的类不加糖的ORM –

+1

如果您最近升级到Android Studio 2.0,即时运行功能会导致SQL表创建出现问题,这会导致您遇到的异常。禁用即时运行修复 –

回答

12

禁用即时运行工作对我来说这

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

     Audio.findById(Audio.class, (long) 1); 
    } 
} 

你的音频表。

+0

非常感谢!你救了我很多时间 –

+0

如何禁用? – snehasish

+0

@snehasish转到文件 - >设置 - >构建,执行,部署 - >即时运行 –

0

请在您的onCreate应用程序类实现黑客findById之类的函数将被创建

1

如果你已经跑了糖您的应用程序,然后以后你添加了一个模型,给出了“没有这种表错误”,那么你需要只更新(增加)的AndroidManifest.xml你的数据库版本元。这在大多数情况下解决了问题,即时运行不是问题。看看问题HERE 欲了解更多信息。

0

消息java.lang.NoSuchTable:是指有人试图调用构造不带任何参数。添加一个默认的构造函数应该解决这个问题:

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

你禁用即时运行后,一定要重新运行前,卸载从手机/仿真器的应用程序。

1

我用的是1.3版本,并面临着同样的问题。 但我解决了使用gradle版本1.5和初始化SugarContext。

在gradle这个依赖关系:

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

在onCreate方法:

SugarContext.init(this); 
+0

禁用*即时运行*可能有所帮助。 –