Android 没有这样的餐桌糖

Android 没有这样的餐桌糖,android,sugarorm,Android,Sugarorm,在我的Android项目中,Sugar ORM有很多问题 这就是错误: 05-07 18:50:42.173 7252-7252/net.elinformaticoenganchado.sergio.crossfighters E/AndroidRuntime: FATAL EXCEPTION: main Process: net.elinformaticoenganchado.sergio.crossfighters, PID: 7252 java.lang.Runti

在我的Android项目中,Sugar ORM有很多问题

这就是错误:

    05-07 18:50:42.173 7252-7252/net.elinformaticoenganchado.sergio.crossfighters E/AndroidRuntime: FATAL EXCEPTION: main
    Process: net.elinformaticoenganchado.sergio.crossfighters, PID: 7252
    java.lang.RuntimeException: Unable to start activity ComponentInfo{net.elinformaticoenganchado.sergio.crossfighters/net.elinformaticoenganchado.sergio.crossfighters.addPlan}: android.database.sqlite.SQLiteException: no such table: PLAN (code 1): , while compiling: INSERT OR REPLACE  INTO PLAN(ID,NAME) VALUES (?,?)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
        at android.app.ActivityThread.-wrap11(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:148)
        at android.app.ActivityThread.main(ActivityThread.java:5417)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
  Caused by: android.database.sqlite.SQLiteException: no such table: PLAN (code 1): , while compiling: INSERT OR REPLACE  INTO PLAN(ID,NAME) VALUES (?,?)
        at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
        at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:887)
        at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:498)
        at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
        at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
        at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
        at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1469)
        at com.orm.SugarRecord.save(SugarRecord.java:280)
        at com.orm.SugarRecord.save(SugarRecord.java:416)
        at net.elinformaticoenganchado.sergio.crossfighters.addPlan.onCreate(addPlan.java:17)
        at android.app.Activity.performCreate(Activity.java:6237)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
        at android.app.ActivityThread.-wrap11(ActivityThread.java) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:148) 
        at android.app.ActivityThread.main(ActivityThread.java:5417) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
当我尝试执行下一个代码时会出现问题:

package net.elinformaticoenganchado.sergio.crossfighters;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

import java.util.List;

public class addPlan extends AppCompatActivity implements View.OnClickListener{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_plan);

        Plan plan = new Plan("Plan1");
        plan.save();

        List<Plan> plans = Plan.listAll(Plan.class);

        for (int i = 0; i < plans.size(); i++) {
            System.out.println("Plan: " + plans.get(i).getName());
        }

    }

    @Override
    public void onClick(View v) {

    }
}
package net.elinformaticoenganchado.sergio.crossfighters;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.view.view;
导入java.util.List;
公共类addPlan扩展AppCompatActivity实现View.OnClickListener{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u add\u plan);
计划=新计划(“计划1”);
计划。保存();
列表计划=Plan.listAll(Plan.class);
对于(int i=0;i
请我需要帮助,我禁用了即时运行选项,就像每个帖子所说的那样,但它不起作用

谢谢你的帮助

我的android清单:

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="net.elinformaticoenganchado.sergio.crossfighters"
    android:versionCode="1"
    android:versionName="1.0">

    <application
        android:allowBackup="true"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        android:name="com.orm.SugarApp">
        <meta-data android:name="DATABASE" android:value="example.db" />
        <meta-data android:name="VERSION" android:value="1" />
        <meta-data android:name="QUERY_LOG" android:value="true" />
        <meta-data android:name="DOMAIN_PACKAGE_NAME" android:value="net.elinformaticoenganchado.sergio.crossfighters" />

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".chronometer" />
        <activity android:name=".addPlan" />
    </application>

</manifest>

这个问题可以通过创建一个空的“新版本迁移脚本文件”来解决。 这可以通过以下方式简单实现:

  • 创建新的Sugar record类
  • 在Android清单文件中,只需增加DB版本
  • 通过这样做,它可以创建新表,而不会删除/创建我的旧表


    我的版本是1.5

    如果您对数据库进行了修改,您必须删除应用程序并作为新应用程序安装,或者更改数据库版本并编写一个alter查询。

    您的应用程序配置正确吗?与中一样,您需要定义一个
    SugarApp
    类并在清单中设置它@cricket_007是的,我已正确配置。请尝试此anwser@例外就像我告诉你的那样,我试图禁用instant run,但它不起作用:(我有同样的问题。我在版本1.4中使用了sugar orm。在启用instant run的开始,我收到了SQLiteException。禁用此选项并在清单中增加版本后,一切都顺利运行。
     <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="net.elinformaticoenganchado.sergio.crossfighters"
        android:versionCode="1"
        android:versionName="1.0">
    
        <application
            android:allowBackup="true"
            android:label="@string/app_name"
            android:supportsRtl="true"
            android:theme="@style/AppTheme"
            android:name="com.orm.SugarApp">
            <meta-data android:name="DATABASE" android:value="example.db" />
            <meta-data android:name="VERSION" android:value="1" />
            <meta-data android:name="QUERY_LOG" android:value="true" />
            <meta-data android:name="DOMAIN_PACKAGE_NAME" android:value="net.elinformaticoenganchado.sergio.crossfighters" />
    
            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <activity android:name=".chronometer" />
            <activity android:name=".addPlan" />
        </application>
    
    </manifest>