2017-09-16 1 views
0

私はLiveQuery for Parse Androidを使用して、イベント、つまりオブジェクトの作成を待機しています。オブジェクトが作成されると、それを私のリストの先頭に追加したい。リスニングパートは機能しているようですが、受け取ったJSONオブジェクトをどうすればいいのか分かりません。特に、私はこのチュートリアルを、以下のホストとしてBack4Appを使用しています:https://docs.back4app.com/docs/android/live-query/Android用Parse LiveQueryを使用して、自動的に新しいオブジェクトをRecyclerAdapterに追加する方法はありますか?

のGradle:

compile 'com.google.code.gson:gson:2.8.1' 
compile 'com.github.tgio:parse-livequery:1.0.3' 

私は別のスレッドでのネットワーク操作を実行し、することが可能である非同期タスクを持っています希望JSONオブジェクトを取得します

private class UpdateTask extends AsyncTask<String, String, String> { 
    protected String doInBackground(final String... string) { 
     Log.e(getClass().getName(), "ASYNC"); 

     // Subscription 
     final Subscription sub = new BaseQuery.Builder("Message") 
       .build() 
       .subscribe(); 

     Log.e(getClass().getName(), String.valueOf(sub.isSubscribed())); 

     sub.on(LiveQueryEvent.CREATE, new OnListener() { 
      @Override 
      public void on(final JSONObject object) { 
       Log.e(getClass().getName(), object.toString()); 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         System.out.println("JSONObject" + object.toString()); 
         // {"op":"create","clientId":13,"requestId":0,"object":{"conversationObject":{"__type":"Pointer","className":"Conversation","objectId":"lZsj4dPCvb"},"messageText":"What's your phone number?","author":{"__type":"Pointer","className":"_User","objectId":"2E0bbd3oSD"},"createdAt":"2017-09-15T15:40:39.303Z","updatedAt":"2017-09-15T15:40:39.303Z","__type":"Object","className":"Message","objectId":"7A4RHttAEr"}} 

         // TODO: Take JSON object, convert to POJO, add to mMessages, notify data adapter 
         String mJsonString = object.toString(); 
         JsonParser parser = new JsonParser(); 
         JsonElement mJson = parser.parse(mJsonString); 
         Gson gson = new Gson(); 
         Message object2 = gson.fromJson(mJson, Message.class); 

         mMessages.add(0, object2); 
         adapter.notifyDataSetChanged(); 

        } 
       }); 
      } 
     }); 

     return null; 
    } 

} 

オブジェクトが作成された後、私は単純に、この非同期タスクを呼び出す:

message.saveInBackground(new SaveCallback() { 
@Override 
public void done(ParseException e) { 

    // Listen for messages and update UI 
    new UpdateTask().execute(); 
} 
}); 

私のメッセージクラスは、この(私はKotlinを使用し、それ以外てることは違いはありません)のようになります。JSONオブジェクトを使用すると

@ParseClassName("Message") 
class Message : ParseObject() { 

    /* Message Pointers */ 
    val author by ParseDelegate<ParseObject>() 
    val contact by ParseDelegate<Contact>() 

    /* Message Content */ 
    val messageText by ParseDelegate<String>() 

} 

、私はのバージョンに変換することができるはずです私のローカルオブジェクトを作成し、それをリストに追加してください。私は上記の試みを示しましたが、オブジェクトは作成後に表示されません。私はまだリフレッシュする必要があります。私はLog.e(getClass().toString(), object2.getMessageText());を印刷するとき、私は、すなわち、エラーがローカルオブジェクトが正しくJSONから作成されていないということです把握私が手

09 - 16 12: 05: 13.907 10004 - 10004/com.sourcey.materialloginexample E/AndroidRuntime: FATAL EXCEPTION: main 
Process: com.sourcey.materialloginexample, PID: 10004 
java.lang.NullPointerException: Attempt to invoke interface method 'void java.util.List.add(int, java.lang.Object)' 
on a null object reference 
at com.sourcey.materiallogindemo.activity.MessageActivity$UpdateTask$1$1.run(MessageActivity.java: 213) 
at android.os.Handler.handleCallback(Handler.java: 751) 
at android.os.Handler.dispatchMessage(Handler.java: 95) 
at android.os.Looper.loop(Looper.java: 154) 
at android.app.ActivityThread.main(ActivityThread.java: 6119) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java: 886) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java: 776) 

さらに悪いことに、すべてのカップルの時間が、私はこのエラーを取得します

09 - 16 12: 15: 31.741 20252 - 20252/com.sourcey.materialloginexample E/AndroidRuntime: FATAL EXCEPTION: main 
Process: com.sourcey.materialloginexample, PID: 20252 
java.lang.NullPointerException: println needs a message 
at android.util.Log.println_native(Native Method) 
at android.util.Log.e(Log.java: 236) 
at com.sourcey.materiallogindemo.activity.MessageActivity$UpdateTask$1$1.run(MessageActivity.java: 213) 
at android.os.Handler.handleCallback(Handler.java: 751) 
at android.os.Handler.dispatchMessage(Handler.java: 95) 
at android.os.Looper.loop(Looper.java: 154) 
at android.app.ActivityThread.main(ActivityThread.java: 6119) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java: 886) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java: 776) 

オブジェクトのデバッグ:

enter image description here

答えて

0

アンドロイドの公式liveQueryクライアントを使用してください。代わりに、JSONオブジェクトを取得する ParseLiveQueryAndroid

、あなたはのparseObject

取得します
関連する問題