我正在將我的Android和iOS應用從Parse.com遷移到Parse Server。首先,我正在使用測試應用進行此遷移,以確保一切正常。 對於iOS來說,沒有任何問題,但隨着Android的更新的應用程序崩潰每次用戶進入應用程序。Android從Parse切換到Parse Server崩潰
這是更新了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.initialize的註釋,註釋Parse.initialize的新版本,編譯並啓動應用程序,這個啓動沒有問題,用戶可以正確使用它。但是,如果我評論舊版本的Parse.initialize,取消註釋新版本的Parse.initialize,編譯並啓動應用程序,則會立即崩潰,因爲ParseUser.getCurrentUser()返回null,並且Parse方法失敗。
我在這裏錯過了什麼?我應該強制我的用戶再次登錄嗎?這對我來說似乎是一個糟糕的用戶體驗,無論如何,在iOS中,我對新版本沒有任何問題,兩種平臺有什麼區別?
編輯1:
繼羅伯特·朗特里的建議,我已經改變了初始化這樣:
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();
}
除了這個我檢查了我的解析版本是最後一個可用的,我有這在我的gradle這個文件:
compile 'com.parse.bolts:bolts-android:1.+'
compile 'com.parse:parse-android:1.+'
,結果是一樣的,應用程序崩潰與「com.parse.ParseException:JAVA .lang.IllegalStateException:無法對未保存的ParseObject「我對Parse進行的第一個調用」進行關聯編碼。 除此之外,我可以看到與解析有關的唯一日誌是與GCM令牌相關的唯一日誌,沒有別的。
編輯2:
我試過另外一件事,與老初始化卸載的應用,並與新的初始化安裝它,因爲我猜新版本現在的工作。
但是,這當然不是我的解決方案,我不能告訴我的用戶卸載應用程序並再次安裝它。
但是,這是一個提示:新的初始化沒有問題,但與新的解析服務器打開應用程序時,舊的解析「反應」,getCurrentUser或類似的東西必須有任何不一致。
驗證ParseSDK是否爲最新版本。嘗試與客戶端回來(無空)...也「Parse.setLogLevel(Parse.LOG_LEVEL_DEBUG);」增加詳細信息 –
謝謝羅伯特!我做了這些改變,但結果是一樣的。 – Wonton