如何捕捉没有这样的表错误糖?
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 中的错误?我们能捕捉到这样的错误吗?