2016-11-23 53 views
0

我正在將我的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或類似的東西必須有任何不一致。

+0

驗證ParseSDK是否爲最新版本。嘗試與客戶端回來(無空)...也「Parse.setLogLevel(Parse.LOG_LEVEL_DEBUG);」增加詳細信息 –

+0

謝謝羅伯特!我做了這些改變,但結果是一樣的。 – Wonton

回答

1

你能嘗試初始化是這樣的:

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); 
+1

是的!這是問題!我可以給你1000個綠色支票嗎? ;-) – Wonton