首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android从Parse切换到Parse Server崩溃

Android从Parse切换到Parse Server崩溃
EN

Stack Overflow用户
提问于 2016-11-23 14:27:25
回答 1查看 180关注 0票数 0

我正在将我的安卓和iOS应用程序从Parse.com迁移到Parse。首先,我使用一个测试应用程序进行这个迁移,以确保一切正常。对于iOS,没有问题,但在安卓系统中,每次用户进入应用程序时,更新的应用程序都会崩溃。

这是更新的Android代码:

代码语言:javascript
复制
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的建议,我将初始化更改为:

代码语言:javascript
复制
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文件中有如下内容:

代码语言:javascript
复制
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中肯定有任何不一致的地方。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-24 18:17:10

您能否尝试像这样初始化:

代码语言:javascript
复制
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()
                );

注意到

代码语言:javascript
复制
.enableLocalDataStore()

在初始化过程中。删除以下内容:

代码语言:javascript
复制
Parse.enableLocalDatastore(app);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40767094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档