table conversations has no column named readAt

升级到4.0后出现bug
以前本地缓存的数据库没有这些字段,更新时没有考虑对本地缓存数据库的更新吗

05-05 17:37:47.090 26504-26504/com.lovewith.lovewith W/System.err: com.avos.avoscloud.im.v2.AVIMException: com.avos.avoscloud.AVException: android.database.sqlite.SQLiteException: table conversations has no column named readAt (code 1): , while compiling: INSERT OR REPLACE INTO conversations(last_message,creator,isTransient,members,readAt,instanceData,expireAt,unread_count,deliveredAt,conversation_id,attr,updatedAt,createdAt) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)
05-05 17:37:47.090 26504-26504/com.lovewith.lovewith W/System.err: at com.avos.avoscloud.im.v2.callback.AVIMConversationQueryCallback.internalDone0(SourceFile:20)
05-05 17:37:47.090 26504-26504/com.lovewith.lovewith W/System.err: at com.avos.avoscloud.im.v2.callback.AVIMConversationQueryCallback.internalDone0(SourceFile:13)
05-05 17:37:47.090 26504-26504/com.lovewith.lovewith W/System.err: at com.avos.avoscloud.AVCallback.internalDone(SourceFile:18)
05-05 17:37:47.090 26504-26504/com.lovewith.lovewith W/System.err: at com.avos.avoscloud.im.v2.AVIMConversationQuery$2.onReceive(SourceFile:564)
05-05 17:37:47.090 26504-26504/com.lovewith.lovewith W/System.err: at android.support.v4.content.LocalBroadcastManager.executePendingBroadcasts(SourceFile:297)
05-05 17:37:47.090 26504-26504/com.lovewith.lovewith W/System.err: at android.support.v4.content.LocalBroadcastManager.access$000(SourceFile:46)
05-05 17:37:47.090 26504-26504/com.lovewith.lovewith W/System.err: at android.support.v4.content.LocalBroadcastManager$1.handleMessage(SourceFile:116)
05-05 17:37:47.090 26504-26504/com.lovewith.lovewith W/System.err: at android.os.Handler.dispatchMessage(Handler.java:111)
05-05 17:37:47.090 26504-26504/com.lovewith.lovewith W/System.err: at android.os.Looper.loop(Looper.java:194)
05-05 17:37:47.090 26504-26504/com.lovewith.lovewith W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5869)
05-05 17:37:47.090 26504-26504/com.lovewith.lovewith W/System.err: at java.lang.reflect.Method.invoke(Native Method)
05-05 17:37:47.090 26504-26504/com.lovewith.lovewith W/System.err: at java.lang.reflect.Method.invoke(Method.java:372)
05-05 17:37:47.090 26504-26504/com.lovewith.lovewith W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020)
05-05 17:37:47.090 26504-26504/com.lovewith.lovewith W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)
05-05 17:37:47.090 26504-26504/com.lovewith.lovewith W/System.err: Caused by: com.avos.avoscloud.AVException: android.database.sqlite.SQLiteException: table conversations has no column named readAt (code 1): , while compiling: INSERT OR REPLACE INTO conversations(last_message,creator,isTransient,members,readAt,instanceData,expireAt,unread_count,deliveredAt,conversation_id,attr,updatedAt,createdAt) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)
05-05 17:37:47.091 26504-26504/com.lovewith.lovewith W/System.err: ... 11 more
05-05 17:37:47.091 26504-26504/com.lovewith.lovewith W/System.err: Caused by: android.database.sqlite.SQLiteException: table conversations has no column named readAt (code 1): , while compiling: INSERT OR REPLACE INTO conversations(last_message,creator,isTransient,members,readAt,instanceData,expireAt,unread_count,deliveredAt,conversation_id,attr,updatedAt,createdAt) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)
05-05 17:37:47.091 26504-26504/com.lovewith.lovewith W/System.err: at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
05-05 17:37:47.091 26504-26504/com.lovewith.lovewith W/System.err: at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:906)
05-05 17:37:47.091 26504-26504/com.lovewith.lovewith W/System.err: at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:517)
05-05 17:37:47.091 26504-26504/com.lovewith.lovewith W/System.err: at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
05-05 17:37:47.091 26504-26504/com.lovewith.lovewith W/System.err: at android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:58)
05-05 17:37:47.091 26504-26504/com.lovewith.lovewith W/System.err: at android.database.sqlite.SQLiteStatement.(SQLiteStatement.java:31)
05-05 17:37:47.091 26504-26504/com.lovewith.lovewith W/System.err: at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1499)
05-05 17:37:47.091 26504-26504/com.lovewith.lovewith W/System.err: at com.avos.avoscloud.im.v2.AVIMMessageStorage.insertConversations(SourceFile:645)
05-05 17:37:47.091 26504-26504/com.lovewith.lovewith W/System.err: at com.avos.avoscloud.im.v2.AVIMConversationQuery.cacheQueryResult(SourceFile:583)
05-05 17:37:47.091 26504-26504/com.lovewith.lovewith W/System.err: at com.avos.avoscloud.im.v2.AVIMConversationQuery.access$200(SourceFile:36)
05-05 17:37:47.091 26504-26504/com.lovewith.lovewith W/System.err: at com.avos.avoscloud.im.v2.AVIMConversationQuery$2.onReceive(SourceFile:551)
05-05 17:37:47.091 26504-26504/com.lovewith.lovewith W/System.err: ... 10 more

可不可以开放一个清除本地缓存的数据库方法

com.google.protobuf.InvalidProtocolBufferException: Message missing required fields: cmd
05-05 17:44:06.953 1367-1422/com.lovewith.lovewith W/System.err: at com.google.protobuf.AbstractParser.checkMessageInitialized(SourceFile:71)
05-05 17:44:06.953 1367-1422/com.lovewith.lovewith W/System.err: at com.google.protobuf.AbstractParser.parseFrom(SourceFile:168)
05-05 17:44:06.953 1367-1422/com.lovewith.lovewith W/System.err: at com.google.protobuf.AbstractParser.parseFrom(SourceFile:180)
05-05 17:44:06.953 1367-1422/com.lovewith.lovewith W/System.err: at com.google.protobuf.AbstractParser.parseFrom(SourceFile:185)
05-05 17:44:06.953 1367-1422/com.lovewith.lovewith W/System.err: at com.google.protobuf.AbstractParser.parseFrom(SourceFile:49)
05-05 17:44:06.953 1367-1422/com.lovewith.lovewith W/System.err: at com.avos.avoscloud.Messages$GenericCommand.parseFrom(SourceFile:24352)
05-05 17:44:06.953 1367-1422/com.lovewith.lovewith W/System.err: at com.avos.avoscloud.AVPushConnectionManager.processCommand(SourceFile:437)
05-05 17:44:06.953 1367-1422/com.lovewith.lovewith W/System.err: at com.avos.avoscloud.AVPushWebSocketClient.onMessage(SourceFile:124)
05-05 17:44:06.953 1367-1422/com.lovewith.lovewith W/System.err: at com.avos.avoscloud.java_websocket.client.WebSocketClient.onWebsocketMessage(SourceFile:245)
05-05 17:44:06.953 1367-1422/com.lovewith.lovewith W/System.err: at com.avos.avoscloud.java_websocket.WebSocketImpl.decodeFrames(SourceFile:381)
05-05 17:44:06.953 1367-1422/com.lovewith.lovewith W/System.err: at com.avos.avoscloud.java_websocket.WebSocketImpl.decode(SourceFile:158)
05-05 17:44:06.953 1367-1422/com.lovewith.lovewith W/System.err: at com.avos.avoscloud.java_websocket.client.WebSocketReadThread.run(SourceFile:34)
05-05 17:44:06.953 1367-1422/com.lovewith.lovewith W/System.err: at java.lang.Thread.run(Thread.java:818)

第一个确实是有问题的,这里代码在 merge 的时候出了点问题,造成一条升级语句没有执行,明天我发一个 hotfix 版本。
第二个是 sdk 内部逻辑,这里我们稍后也会修一下,不过这个 exception 并不会影响具体业务。

4.0.1 已经发布,可以测试一下。4.0 之前的版本升级到 4.0.1 的问题已经修复了。
如果已经升级到了 4.0 可以先回退到以前版本,然后再升级到 4.0.1 试一下。

更新到了4.0.2依旧有第二个问题
05-12 17:30:33.222 6758-8463/com.bianguo.android.beautiful W/System.err: com.google.protobuf.InvalidProtocolBufferException: Message missing required fields: cmd
05-12 17:30:33.223 6758-8463/com.bianguo.android.beautiful W/System.err: at com.google.protobuf.AbstractParser.checkMessageInitialized(AbstractParser.java:71)
05-12 17:30:33.224 6758-8463/com.bianguo.android.beautiful W/System.err: at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:168)
05-12 17:30:33.224 6758-8463/com.bianguo.android.beautiful W/System.err: at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:180)
05-12 17:30:33.224 6758-8463/com.bianguo.android.beautiful W/System.err: at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:185)
05-12 17:30:33.224 6758-8463/com.bianguo.android.beautiful W/System.err: at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:49)
05-12 17:30:33.224 6758-8463/com.bianguo.android.beautiful W/System.err: at com.avos.avoscloud.Messages$GenericCommand.parseFrom(Messages.java:26001)
05-12 17:30:33.224 6758-8463/com.bianguo.android.beautiful W/System.err: at com.avos.avoscloud.AVPushConnectionManager.processCommand(AVPushConnectionManager.java:437)
05-12 17:30:33.224 6758-8463/com.bianguo.android.beautiful W/System.err: at com.avos.avoscloud.AVPushWebSocketClient.onMessage(AVPushWebSocketClient.java:122)
05-12 17:30:33.224 6758-8463/com.bianguo.android.beautiful W/System.err: at com.avos.avoscloud.java_websocket.client.WebSocketClient.onWebsocketMessage(WebSocketClient.java:245)
05-12 17:30:33.224 6758-8463/com.bianguo.android.beautiful W/System.err: at com.avos.avoscloud.java_websocket.WebSocketImpl.decodeFrames(WebSocketImpl.java:381)
05-12 17:30:33.225 6758-8463/com.bianguo.android.beautiful W/System.err: at com.avos.avoscloud.java_websocket.WebSocketImpl.decode(WebSocketImpl.java:158)
05-12 17:30:33.226 6758-8463/com.bianguo.android.beautiful W/System.err: at com.avos.avoscloud.java_websocket.client.WebSocketReadThread.run(WebSocketReadThread.java:34)
05-12 17:30:33.226 6758-8463/com.bianguo.android.beautiful W/System.err: at java.lang.Thread.run(Thread.java:841)

发生了这个问题后,导致用户AVImClientManager.getInstance().getClient().getClientStatus取到的AVIMClient.AVIMClientStatus为null

可以提供复现场景和完整代码吗?我这边无法复现你的问题。