【问题标题】:Android - Delay in getting value from Parse QueryAndroid - 从解析查询中获取价值的延迟
【发布时间】:2015-08-12 07:41:22
【问题描述】:

您好,我正在使用 Parse 和 Firebase 构建一个聊天应用程序,用户详细信息在 Parse 中维护,并且聊天在 Firebase 上运行。

在每次用户开始与某人聊天时,它必须转到 Parse “Recent” - 类,它必须检查 Arraylist 匹配,如果该行包含匹配,那么它必须返回一个预期值,我会将其保存在共享首选项中,否则我们会在代码本身中创建一个值并将其保存在首选项中。

我的问题是什么......实际上 Parse 查询工作正常,它第一次立即传递预期值,但下一次(如果你返回并选择另一个用户聊天),它从共享首选项中获取先前的值,然后执行解析查询,因为解析线程在后台执行,因此需要时间。因此,第二次聊天也保存在以前的值中。我只想立即从解析查询中获取值并保存它。但我不知道该怎么做。

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

谁能告诉我如何解决这个问题?

【问题讨论】:

    标签: android parse-platform firebase parse-android-sdk


    【解决方案1】:

    披露:我为 Firebase 工作

    我以前从未使用过 Parse,但与大多数现代互联网一样,它可能会异步加载数据。这意味着您应该只在 Parse 完成加载数据后尝试从 Firebase 加载数据。

    您可以通过将从 Firebase 加载的代码移动到执行 Parse 数据已加载的回调:

    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");
                }
            } else {
                groupId = user1ObjectId + user2ObjectId;
            }
            mFirebaseRef = new Firebase(FIREBASE_URL).child(groupId);
            mFirebaseRef.setValueEventListener... 
        }
    });
    

    注意,我把与实际问题无关的代码都去掉了,这样更容易看流程。

    【讨论】:

      猜你喜欢
      • 2021-04-03
      • 1970-01-01
      • 2019-12-13
      • 2020-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多