Проблемы с ParseLiveQuery - PullRequest
0 голосов
/ 14 мая 2019

Я сделал запрос на анализ, и теперь мне нужно реализовать живой запрос.Но мой запрос имеет List<ParseObject>, и я вижу, что здесь в этом liveQuery методе он отличается.

        public void onEvent(ParseQuery<ParseObject> query, final ParseObject object) {

ParseQuery - то, что имеет этот метод - пожалуйста, обратитесь к моему предыдущему посту) чтобы увидеть это.

Это код, предложенный в документации:

if (parseLiveQueryClient != null) {
ParseQuery<ParseObject> parseQuery = new ParseQuery("Message");
parseQuery.whereEqualTo("destination", "pokelist");
SubscriptionHandling<ParseObject> subscriptionHandling = parseLiveQueryClient.subscribe(parseQuery);

subscriptionHandling.handleEvent(SubscriptionHandling.Event.CREATE, new SubscriptionHandling.HandleEventCallback<ParseObject>() {
    @Override
    public void onEvent(ParseQuery<ParseObject> query, final ParseObject object) {
        Handler handler = new Handler(Looper.getMainLooper());
        handler.post(new Runnable() {
            public void run() {
                EditText pokeText = findViewById(R.id.pokeText);
                numPokes++;
                if(numPokes == 1) {
                    pokeText.setText("Poked " + numPokes + " time.");
                }
                else {
                    pokeText.setText("Poked " + numPokes + " times.");
                }
            }
        });
    }
});}

Я сделал это и обновил свой список сообщений.Какие-либо предложения?Я новичок в разборе и очень запутался!

 ParseQuery<ParseObject> query = ParseQuery.getQuery("Conversaciones");
        queryChat = ParseObject.createWithoutData("Chat", idChatSeleccionadoAppUsuario);
        query.whereEqualTo("ChatId", queryChat);
        query.include("Usuario");
        query.include("ChatId");
        SubscriptionHandling<ParseObject> subscriptionHandling= App.parseLiveQueryClient.subscribe(query);
        subscriptionHandling.handleEvent(SubscriptionHandling.Event.CREATE, new SubscriptionHandling.HandleEventCallback<ParseObject>() {
            @Override
            public void onEvent(final ParseQuery<ParseObject> query, final ParseObject object) {
                Handler handler = new Handler(Looper.getMainLooper());
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        listaDeMensajes.add(object);
                    }

                });

                mMessageAdapter = new MessageListAdapter(getContext(), listaDeMensajes);
                mMessageRecycler.setAdapter(mMessageAdapter);
                queryFromChat();

            }
        });

1 Ответ

0 голосов
/ 22 мая 2019

Я решил свою проблему вот так ...

Сначала сделайте подписку следующим образом.

private void  changeChatLive(){
    listaDeMensajes.clear();
    ParseQuery<ParseObject> query = ParseQuery.getQuery("Conversaciones");
    // Connect to Parse server
    SubscriptionHandling<ParseObject> subscriptionHandling = parseLiveQueryClient.subscribe(query);

    // Listen for CREATE events
    subscriptionHandling.handleEvent(SubscriptionHandling.Event.CREATE, new
            SubscriptionHandling.HandleEventCallback<ParseObject>() {
                @Override
                public void onEvent(ParseQuery<ParseObject> query, ParseObject object) {

                    Handler handler = new Handler(Looper.getMainLooper());
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            mMessageAdapter.notifyDataSetChanged();
                            mMessageRecycler.scrollToPosition(0);
                        }

                    });
                }
            });
}

Затем я вызвал метод здесь и вуаля работает liveChat. ПРИМЕЧАНИЕ. Вызывайте метод там, где вам нужен живой запрос для обновления!.

                queryConversaciones();
                mMessageAdapter.notifyDataSetChanged();
                **changeChatLive();**
...