【问题标题】:Android application crashing after updating from playstore only仅从 Playstore 更新后 Android 应用程序崩溃
【发布时间】:2017-03-25 14:37:35
【问题描述】:

我最近更新了My Application 1.2 版,因为我使用内置数据库来显示数据。我第一次从资产中复制了数据库,并使用 ContentProvider 来访问数据库中的数据。

它在首次安装时工作正常,但如果任何用户从 Playstore 更新应用程序就会出错。

用户报告的

错误日志

报告 1:

android.database.sqlite.SQLiteException: no such column: utp (code 1): , while compiling: UPDATE quotes SET liked=?,utp=? WHERE _id=1183
    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.updateWithOnConflict(SQLiteDatabase.java:1574)
    at android.database.sqlite.SQLiteDatabase.update(SQLiteDatabase.java:1522)
    at com.emergingcoders.database.QuoteContentProvider.update(Unknown Source)
    at android.content.ContentProvider$Transport.update(ContentProvider.java:355)
    at android.content.ContentResolver.update(ContentResolver.java:1360)
    at com.emergingcoders.a.c$a.onClick(Unknown Source)
    at android.view.View.performClick(View.java:5201)
    at android.view.View$PerformClick.run(View.java:21163)
    at android.os.Handler.handleCallback(Handler.java:746)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5443)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)

报告 2(进入相同的活动):

java.lang.RuntimeException: An error occurred while executing doInBackground()
    at android.support.v4.content.o$3.done(Unknown Source)
    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
    at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
    at java.util.concurrent.FutureTask.run(FutureTask.java:242)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
    at java.lang.Thread.run(Thread.java:818)
Caused by: android.database.sqlite.SQLiteException: no such column: utp (code 1): , while compiling: SELECT * FROM quotes WHERE (liked=1) ORDER BY utp DESC
    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.SQLiteQuery.<init>(SQLiteQuery.java:37)
    at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
    at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1316)
    at android.database.sqlite.SQLiteQueryBuilder.query(SQLiteQueryBuilder.java:400)
    at android.database.sqlite.SQLiteQueryBuilder.query(SQLiteQueryBuilder.java:294)
    at com.emergingcoders.database.QuoteContentProvider.query(Unknown Source)
    at android.content.ContentProvider.query(ContentProvider.java:1017)
    at android.content.ContentProvider$Transport.query(ContentProvider.java:238)
    at android.content.ContentResolver.query(ContentResolver.java:491)
    at android.support.v4.content.c.a(Unknown Source)
    at android.support.v4.content.b$c.a(Unknown Source)
    at android.support.v4.content.b.a(Unknown Source)
    at android.support.v4.content.k.h(Unknown Source)
    at android.support.v4.content.k.d(Unknown Source)
    at android.support.v4.content.a.e(Unknown Source)
    at android.support.v4.content.a$a.a(Unknown Source)
    at android.support.v4.content.a$a.a(Unknown Source)
    at android.support.v4.content.o$2.call(Unknown Source)
    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
    ... 3 more

报告 3:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mrapps.statusandquotes/com.emergingcoders.activities.TodaysQuotesActivity}: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2426)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2490)
    at android.app.ActivityThread.-wrap11(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1354)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5443)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
Caused by: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
    at android.database.CursorWindow.nativeGetString(Native Method)
    at android.database.CursorWindow.getString(CursorWindow.java:438)
    at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51)
    at android.database.CursorWrapper.getString(CursorWrapper.java:137)
    at com.emergingcoders.activities.TodaysQuotesActivity.onCreate(Unknown Source)
    at android.app.Activity.performCreate(Activity.java:6245)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1130)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379)
    ... 9 more

proguard-rules.pro:

-keep public class android.support.v7.widget.** { *; }
-keep public class android.support.v7.internal.widget.** { *; }
-keep public class android.support.v7.internal.view.menu.** { *; }

-keep public class * extends android.support.v4.view.ActionProvider {
    public <init>(android.content.Context);
}

-keep public class * extends android.support.v7.widget.RecyclerView$LayoutManager {
    public <init>(...);
}

-keep class android.support.v7.widget.RoundRectDrawable { *; }

# support design
-dontwarn android.support.design.**
-keep class android.support.design.** { *; }
-keep interface android.support.design.** { *; }
-keep public class android.support.design.R$* { *; }

-keep class uk.co.chrisjenx.calligraphy.* { *; }
-keep class uk.co.chrisjenx.calligraphy.*$* { *; }

-keep class com.firebase.** { *; }
-keep class org.apache.** { *; }
-keepnames class com.fasterxml.jackson.** { *; }
-keepnames class javax.servlet.** { *; }
-keepnames class org.ietf.jgss.** { *; }
-dontwarn org.w3c.dom.**
-dontwarn org.joda.time.**
-dontwarn org.shaded.apache.**
-dontwarn org.ietf.jgss.**

# Only necessary if you downloaded the SDK jar directly instead of from maven.
-keep class com.shaded.fasterxml.jackson.** { *; }

-dontwarn okio.**
-dontwarn retrofit2.**
-keep class retrofit2.** { *; }
-keepattributes Signature
-keepattributes Exceptions

-keep class com.emergingcoders.model.** { *; }

-keepclasseswithmembers class * {
    @retrofit2.http.* <methods>;
}

我没有在新的更新中更新数据库版本,我尝试了很多找到但不知道为什么只在更新应用后发生。

有人可以帮忙吗?提前致谢。

【问题讨论】:

  • 复制的怎么样了?如果和SQLiteAssetHelper有什么不同,那就是你做错了。

标签: android sqlite proguard android-contentprovider android-proguard


【解决方案1】:

我认为您没有为您的数据库提供正确的更新脚本。如果应用程序是从头开始运行的(即没有现有的数据库),这将正常工作(因为不需要数据库迁移)

研究 SQLHelper 类,它们提供了允许您迁移数据库版本的方法。

需要明确的是,您需要更新的是数据库架构,而不是数据(架构中缺少一列,错误指出):

no such column: utp

【讨论】:

  • 我不会在任何更新时更新数据库,因为它只是第一次复制。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 2021-05-26
  • 2019-01-22
  • 1970-01-01
相关资源
最近更新 更多