Мне нужно возвращение получить значение из метода обратного вызова - PullRequest
0 голосов
/ 03 июня 2018

Мне нужно вернуть ListView из следующего кода.getUser () - это функция, возвращающая пользователя из базы данных, которая делает это асинхронно.Кстати, я использую Firebase.Мне нужно, чтобы он возвращал ListView после Callback при получении данных из базы данных, это код в onCallback (), но я не могу поместить в него возврат, он должен быть вне его.Но, конечно, если я выложу его за пределы, он будет выполняться в первую очередь, чем извлечение данных, поскольку он асинхронный.

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = context.getLayoutInflater();
    final View listViewItem = inflater.inflate(R.layout.translation_item_layout, null, true);

    final TextView textViewUsername = (TextView) listViewItem.findViewById(R.id.textViewUsername);
    final TextView textViewBio = (TextView) listViewItem.findViewById(R.id.textViewBio);
    final TextView textViewTranslationText = (TextView) listViewItem.findViewById(R.id.textViewTranslationText);
    final TextView textViewSource = (TextView) listViewItem.findViewById((R.id.textViewSource));
    final TextView textViewScore = (TextView) listViewItem.findViewById((R.id.textViewScore));
    final TextView textViewCommentsCount = (TextView) listViewItem.findViewById((R.id.textViewCommentsCount));
    final CircleImageView imageViewProfilePicture = (CircleImageView) listViewItem.findViewById(R.id.imageProfile);

    translation = translations.get(position);

    getUser(new FirebaseCallback<User>() {
                @Override
                public void onCallback(User data) {
                    textViewUsername.setText(user.getNickname());
                    textViewBio.setText(user.getBio());
                    Glide.with(getContext()).load(user.getImage()).into(imageViewProfilePicture);

                    textViewTranslationText.setText(translation.getText());
                    textViewSource.setText(translation.getSource());
                    textViewScore.setText(String.valueOf(translation.getLikes() - translation.getDislikes()));
                    textViewCommentsCount.setText(String.valueOf(translation.getComments()));
                    //return listViewItem -> I need to do the effect of returning here, after the callback
                }
            });
    return listViewItem; //If i leave it here, it executes asynchronously, first than the code in the onCallBack()
}

Я попытался найти способ ее решения и обнаружил, что, возможно, это можно сделать.через метод FutureTask, но никогда не использовал его раньше, и я не смог реализовать его успешно.Можете ли вы помочь мне, как это сделать?Возможно, вы знаете, как правильно его реализовать, или, возможно, есть другое решение, которое вы знаете ... Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...