我正在将我的安卓和iOS应用程序从Parse.com迁移到Parse。首先,我使用一个测试应用程序进行这个迁移,以确保一切正常。对于iOS,没有问题,但在安卓系统中,每次用户进入应用程序时,更新的应用程序都会崩溃。
这是更新的Android代码:
public static void initParse(Application app) {
ctxt = app.getApplicationContext();
Parse.enableLocalDatastore(app);
// Old version
//Parse.initialize(app, "<my app id>", "<my client key>");
// New version
Parse.initialize(new Parse.Configuration.Builder(ctxt)
.applicationId("<my app id>")
.clientKey(null)
.server("https://<my new server>/parse/")
.build()
);
ParseUser.enableRevocableSessionInBackground();
}该崩溃返回一个"com.parse.ParseException: java.lang.IllegalStateException:无法用未保存的ParseObject对关联进行编码“,并考虑到我在Stackoverflow中看到的内容,这是因为ParseUser.getCurrentUser()返回null (尽管用户已登录),而Parse方法失败。
事实上,如果我使用相同的代码,取消旧版本的Parse.initialize,注释新版本的Parse.initialize,编译并启动应用程序,这是没有问题的,用户可以正确地使用它。
但是,如果我评论旧版本的Parse.initialize,取消对新版本的Parse.initialize的注释,编译并启动应用程序,这会立即崩溃,因为ParseUser.getCurrentUser()返回null,而Parse方法失败。
我在这里错过了什么?我应该强迫我的用户再次登录吗?在我看来,这似乎是一个糟糕的UX,而且无论如何,在iOS中,我对新版本没有问题,这两个平台之间有什么区别?
编辑1:
按照Rowntree的建议,我将初始化更改为:
public static void initParse(Application app) {
ctxt = app.getApplicationContext();
Parse.enableLocalDatastore(app);
// Old version
//Parse.initialize(app, "<my app id>", "<my client key>");
// New version
Parse.initialize(new Parse.Configuration.Builder(ctxt)
.applicationId("<my app id>")
.clientKey("<my client key>")
.server("https://<my new server>/parse/")
.build()
);
//Parse.setLogLevel(Parse.LOG_LEVEL_DEBUG);
Parse.setLogLevel(Parse.LOG_LEVEL_VERBOSE);
ParseUser.enableRevocableSessionInBackground();
}除此之外,我还检查了我的Parse版本是否是最后可用的版本,我的gradle文件中有如下内容:
compile 'com.parse.bolts:bolts-android:1.+'
compile 'com.parse:parse-android:1.+'结果是相同的,应用程序崩溃了"com.parse.ParseException: java.lang.IllegalStateException:无法用未保存的ParseObject对关联进行编码“,这是我第一次调用Parse。除此之外,我能看到的唯一与解析相关的日志是一个与GCM令牌相关的日志,而不是其他任何东西。
编辑2:
我尝试了另一种方法,用旧的初始化卸载应用程序,然后用新的初始化安装它,正如我猜的那样,新版本现在正在工作。
但是,当然这不是我的解决方案,我不能告诉我的用户卸载应用程序和重新安装它。
但是这是一个提示:新的初始化没有问题,但是在使用新的Parse打开应用程序时,旧的Parse如何“反应”,getCurrentUser中肯定有任何不一致的地方。
发布于 2016-11-24 18:17:10
您能否尝试像这样初始化:
Parse.initialize(new Parse.Configuration.Builder(this)
.applicationId("APP_ID")
.clientKey("CLIENT_KEY")
.server("https://SERVER_URL/parse/") // The trailing slash is important.
.enableLocalDataStore()
.build()
);注意到
.enableLocalDataStore()在初始化过程中。删除以下内容:
Parse.enableLocalDatastore(app);https://stackoverflow.com/questions/40767094
复制相似问题