こんにちは、Parse と Firebase を使用してチャット アプリケーションを構築しています。ユーザーの詳細は Parse で管理され、チャットは Firebase で動作しています。
そのため、ユーザーが誰かとチャットを開始するたびに、Parse "Recent" クラスに移動する必要があり、Arraylist の一致をチェックする必要があります。行に一致が含まれている場合は、期待値を返す必要があり、それを保存します。それ以外の場合は、コード自体で値を作成し、それを設定に保存します。
私の問題は何ですか...実際に解析クエリは正常に機能しており、最初はすぐに期待値を渡しますが、次回(戻ってチャットする別のユーザーを選択した場合)、以前の値を解析スレッドはバックグラウンドで実行されているため、時間がかかるため、設定を共有してから解析クエリを実行します。そのため、2 番目のチャットも前の値に保存されます。解析クエリからすぐに値を取得して保存したいだけです。しかし、私はそれを行う方法がわかりません。
sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
groupIdQuery = ParseQuery.getQuery("Recent");
groupIdQuery.whereContainsAll("members", Arrays.asList(user1ObjectId, user2ObjectId));
Log.d("objectArray", Arrays.asList(user1ObjectId, user2ObjectId).toString());
groupIdQuery.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> list, ParseException e) {
if (e == null && list.size() != 0) {
for (ParseObject dealsObject : list) {
recentClassObjectId = dealsObject.getObjectId();
groupId = (String) dealsObject.get("groupId");
Log.d("!!!!!GroupId", groupId);
//String members = (String) dealsObject.get("members");
//Toast.makeText(getApplicationContext(), "ObjectId: " + recentClassObjectId + "\n" + "GroupId: " + groupId + " value present", Toast.LENGTH_LONG).show();
}
editor = sharedpreferences.edit();
editor.putString(gId, groupId);
Log.d("ifGroupId", groupId);
editor.commit();
} else {
SharedPreferences.Editor editor = sharedpreferences.edit();
Toast.makeText(getApplicationContext(), " No Data present", Toast.LENGTH_LONG).show();
groupId = user1ObjectId + user2ObjectId;
editor.putString(gId, groupId);
editor.commit();
Log.d("!!!!ElseGroupId", groupId);
entryToRecentChat = new ParseObject("Recent");
entryToRecentChat.put("groupId", groupId);
entryToRecentChat.put("lastUser", ParseObject.createWithoutData("_User", user1ObjectId));
entryToRecentChat.put("user", ParseObject.createWithoutData("_User", user2ObjectId));
entryToRecentChat.addAllUnique("members", Arrays.asList(user1ObjectId, user2ObjectId));
entryToRecentChat.saveEventually(new SaveCallback() {
@Override
public void done(ParseException e) {
if (e == null) {
Toast.makeText(getApplicationContext(), "Value saved", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getApplicationContext(), "Value not saved", Toast.LENGTH_LONG).show();
Log.d("exception", e.getMessage());
}
}
});
Log.d("elseGroupId", groupId);
editor = sharedpreferences.edit();
editor.putString(gId, groupId);
Log.d("ifGroupId", groupId);
editor.commit();
}
}
});
valueId = sharedpreferences.getString(gId, "default");
mFirebaseRef = new Firebase(FIREBASE_URL).child(valueId);
Log.d("FinalGroupId", valueId);
誰でも、これを解決する方法を教えてもらえますか?