糖orm创建表问题

时间:2016-08-25 09:18:14

标签: android sugarorm

首先,我到处寻找解决方案,但我还没有找到解决表创建常见错误的方法:

  

引起:android.database.sqlite.SQLiteException:没有这样的表:   EVENT(代码1):在编译时:INSERT OR REPLACE INTO EVENT

我的清单:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.company.something.something2">
        ...
        <meta-data android:name="DATABASE" android:value="sugarexample.db" />
        <meta-data android:name="VERSION" android:value="4" />
        <meta-data android:name="QUERY_LOG" android:value="true" />
        <meta-data android:name="DOMAIN_PACKAGE_NAME" android:value="com.company.something.something2.Entities" />

我的实体:

package com.company.something.something2.Entities;

import com.orm.SugarRecord;

public class Event extends SugarRecord {
    private String description;
    private String title;
    private String photo;
    public Event() {

    }

    //setters and getters
}

我的活动(用于调试):

...
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        SugarContext.init(getApplicationContext());
        com.company.something.something2.Entities.Event book =
                new com.company.something.something2.Entities.Event();
        book.setId((long) 1);
        book.setTitle("test");
        book.setDescription("de");
        book.setPhoto("someurl");
        book.save();

我尝试过:

  • 在Android Studio中禁用即时运行
  • 删除DOMAIN_PACKAGE_NAME元标记(某人建议某人)
  • 将其值更改为com.company.something.something2
  • 重新安装应用
  • 增加版本
  • 重命名DATABASE值
  • 创建迁移文件以创建数据库

P.S:我正在使用SugarORM 1.5,Gradle 2.1.3

有没有人有任何想法?

1 个答案:

答案 0 :(得分:2)

看起来你的桌子没有创建。 SugarOrm需要一个android Application 类,它可以从中开始创建或管理其表模式和其他必要的东西。

根据您的代码,您已在活动中定义了SugarContext.init(getApplicationContext());。如果您没有将课程扩展到 SugarApp 课程,那么这应该是应用程序类的一部分。

因此将此行移至Application类的 onCreate 还在onTerminate()

中添加以下行
 SugarContext.terminate();  

因此,您的Application类将如下所示:

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        SugarContext.init(this);
    }

    @Override
    public void onTerminate() {
        super.onTerminate();
        SugarContext.terminate();
    }
}

并在Androidmanifest.xml文件中声明此类

<application
  android:name=".MyApplication"
  .. rest of the code