2016-11-23 8 views
0

AndroidとiOSアプリをParse.comからParse Serverに移行しています。まず、テストアプリでこの移行を実行して、すべてが正常であることを確認します。 iOSでは問題はありませんでしたが、Androidでは、ユーザーがアプリに入るたびに更新されたアプリがクラッシュします。Parse to Parse ServerがクラッシュするAndroidスイッチ

これは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との関連付けをエンコードすることができない」を返し、考慮に入れてParseUser.getCurrentUser()が(ユーザーがログインしているにもかかわらず)nullを返し、Parseメソッドが失敗するためです。

実際に、私はこの同じコードを取ってParse.initializeの旧バージョンのコメントを外し、Parse.initializeの新しいバージョンにコメントし、コンパイルして起動します。これは問題なく起動され、ユーザーは正しく使用できます。 。

Parse.initializeの旧バージョンにコメントし、Parse.initializeの新しいバージョンのコメントを外してコンパイルしてアプリを起動すると、ParseUser.getCurrentUser()がnullを返しParseメソッドが失敗するため、クラッシュが発生します。

私はここで何が欠けていますか?ユーザーに再度ログインさせる必要がありますか?これは私には悪いUXだと思うし、とにかく、私は新しいバージョンで問題はないが、どちらのプラットフォームの違いは何ですか?このほかに、私は私の解析のバージョンは、私が持っている、最後に利用可能であることを

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(); 
} 

をチェックしました:私はこれに初期設定を変更したロバート・ラウントリーのアドバイスに従い

EDIT 1私のGradleファイルで、このします。java:

compile 'com.parse.bolts:bolts-android:1.+' 
compile 'com.parse:parse-android:1.+' 

、結果は「com.parse.ParseExceptionと同じ、アプリがクラッシュです.lang.IllegalStateException:保存されていないParseObjectとの関連付けをエンコードできません "最初にParseに行う呼び出し。 これ以外にも、GCMトークンに関連したパーズと関連するユニークなログはありません。

EDIT 2:私は古い初期設定でアプリをアンインストールして、新しい初期化とそれをインストールして、私は推測して、新しいバージョンが現在取り組んでいる、別のものを試してみた

もちろん、これは私にとっては解決策ではありませんが、ユーザーにアプリをアンインストールして再度インストールするように指示することはできません。

これはヒントです:新しい初期化に問題はありませんが、新しいParse Serverでアプリケーションを開くときに古いParseがどのように反応するかによって、getCurrentUserなどに矛盾がなければなりません。

.enableLocalDataStore() 

がinitilizationである

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() 
       ); 

予告:

+0

ParseSDKが最新版であることを確認します。 clientKeyを使って試してみてください...(nullもありません)... "Parse.setLogLevel(Parse.LOG_LEVEL_DEBUG);"詳細を追加 –

+0

ありがとうRobert!私はその変更を加えましたが、結果は同じです。 – Wonton

答えて

1

あなたは、このように初期化を試すことができます。これを削除する:

Parse.enableLocalDatastore(app); 
+1

はい!それは問題だった!あなたに1000回の緑色の小切手をあげることができます;-) – Wonton

関連する問題