如何捕捉没有这样的表错误糖?

Posted

技术标签:

【中文标题】如何捕捉没有这样的表错误糖?【英文标题】:How to catch no such table error sugar? 【发布时间】:2018-12-07 06:30:33 【问题描述】:

我收到此错误 Caused by: android.database.sqlite.SQLiteException: no such table: 有什么办法可以抓住它。 我尝试使用 try and catch 并且不工作的应用程序崩溃了 我的代码

JsonStroageMilla jsonStroageMilla=new JsonStroageMilla();
jsonStroageMilla.findById(JsonStroageMilla.class,1);

我的班级

    @Keep
    public class JsonStroageMilla extends SugarRecord 
        public JsonStroageMilla()

        
    public String getData() 
        return data;
    

    public void setData(String data) 
        this.data = data;
    

    public String getTime() 
        return time;
    

    public void setTime(String time) 
        this.time = time;
    

    String data,time;
  

完整的错误代码

致命异常:主要 进程:com.valyangadi,PID:16477 java.lang.RuntimeException:无法启动活动 组件信息com.app/CheckoutActivity062802: android.view.InflateException:二进制 XML 文件第 23 行:二进制 XML 文件第 32 行:膨胀类片段时出错 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2426) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2490) 在 android.app.ActivityThread.-wrap11(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1354) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:5443) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 引起:android.view.InflateException:二进制 XML 文件第 23 行: 二进制 XML 文件第 32 行:膨胀类片段时出错 在 android.view.LayoutInflater.inflate(LayoutInflater.java:539) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:423) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:374) 在 android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:292) 在 android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140) 在 com.shopify.sample.checkout.CheckoutActivity062802.onCreate(CheckoutActivity062802.java:18) 在 android.app.Activity.performCreate(Activity.java:6245) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1130) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2490) 在 android.app.ActivityThread.-wrap11(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1354) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:5443) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 引起:android.view.InflateException:二进制 XML 文件第 32 行: 膨胀类片段时出错 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:782) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:835) 在 android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798) 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:838) 在 android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798) 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:838) 在 android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798) 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:838) 在 android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798) 在 android.view.LayoutInflater.parseInclude(LayoutInflater.java:971) 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:831) 在 android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:515) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:423) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:374) 在 android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:292) 在 android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140) 在 com.shopify.sample.checkout.CheckoutActivity062802.onCreate(CheckoutActivity062802.java:18) 在 android.app.Activity.performCreate(Activity.java:6245) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1130) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2490) 在 android.app.ActivityThread.-wrap11(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1354) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:5443) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 引起:android.database.sqlite.SQLiteException:没有这样的表: JSON_STROAGE_MILLA(代码 1):,编译时:SELECT * FROM JSON_STROAGE_MILLA 在 android.database.sqlite.SQLiteConnection.nativePrepareStatement(本机 方法) 在 android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:887) 在 android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:498) 在 android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 在 android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:58) 在 android.database.sqlite.SQLiteQuery.(SQLiteQuery.java:37) 在 android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44) 在 android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1316) 在 android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1163) 在 android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1034) 在 android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1240) 在 com.orm.SugarRecord.find(SugarRecord.java:201) 在 com.orm.SugarRecord.listAll(SugarRecord.java:127) 在

【问题讨论】:

能否分享一下代码 您确定该表存在吗? 我在用糖,我不知道他们是怎么做桌子的 我们只是调用 object.save() 来插入和 findbyid 从 sqlite 读取 我认为你没有正确实现 Sugar,无论如何我认为 try and catch 正在工作并且你的应用程序由于一些 xml 布局问题而崩溃 【参考方案1】: 尝试禁用即时 首先从您的设备/模拟器中卸载您的应用。 然后清理项目(Android Studio、构建、清理项目)。 现在运行您的应用。

【讨论】:

嗨,我知道为什么再次卸载和安装有效!正如下面的答案所说,每次添加新表或更改表设计时都应该升级数据库版本......所以卸载不是真正的答案,正确的答案是版本升级......另请注意,您必须升级 1 而不是 0.1。【参考方案2】:

添加一个空的构造函数并确保将数据库值更新为 1,所以

public JsonStroageMilla() 

<meta-data
android:name="VERSION"
android:value="2"/>

【讨论】:

更新代码后仍然显示错误 尝试 JsonStroageMilla jsonStroageMilla=new JsonStroageMilla(); jsonStroageMilla.save();地址地址=新地址();地址.save(); catch (Exception e) Log.e("hack","sugar \ne:"+e.getMessage());

以上是关于如何捕捉没有这样的表错误糖?的主要内容,如果未能解决你的问题,请参考以下文章

如何解决首次部署到 IOS 设备的“没有这样的表:Z_METADATA”错误

Nuxt 和 Vue Apollo。如何通过重定向到 404/400/500 错误页面来处理 Smart Query 中的错误?我们能捕捉到这样的错误吗?

如何捕捉数据库错误并将其转化为对业务层有意义的信息?

没有这样的表 SQLite 错误:电子邮件 [重复]

try..catch 没有捕捉到异步/等待错误

Django中用于创建注册页面的“没有这样的表”错误是啥?