等待查询在构造函数中完成

时间:2019-10-30 18:26:36

标签: java android firebase firebase-realtime-database

我正在创建一个对象。有些变量是在应用程序内创建的,而有些变量是在Firebase中查询后创建的。我必须从数据库中获取一些信息。

问题是我想创建分配了所有变量的“即用型”对象,但是我不知道该怎么做。

这是我的对象

public class Translations {

    private String nativeWord,foreignWord;
    private String description,useCases;
    private String examples;
    private Query query;

    public Translations(String mNativeWord,String mForeignWord){
        nativeWord = mNativeWord;
        foreignWord = mForeignWord;
    }

我想从数据库中下载说明,用例和示例。我已经在我的Translations.class中创建了这样的方法:

 public void query(String queryWord){
        query = FirebaseDatabase.getInstance().getReference().orderByKey().equalTo(queryWord);

        query.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if(dataSnapshot.exists()) {
                    for (DataSnapshot ds : dataSnapshot.getChildren()) {

                        Translations a = ds.getValue(Translations.class);
                        nativeWord = a.getNativeWord();
                        description = a.getDescription();
                        useCases = a.getUseCases();
                        examples = a.getExamples();
                    }
                }


            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });

    }

现在,我通过在Activity类中调用查询方法来解决问题。

(I am getting object a from a ListView where I already have the foreignWord and nativeWord)

Translations a = (Translations) translationsListView.getItemAtPosition(i);
                a.query(a.getForeignWord());

                    foreignWord.setText(a.getForeignWord());
                    nativeWord.setText(a.getNativeWord());
                    description.setText(a.getDescription());
                    useCases.setText(a.getUseCases());
                    examples.setText(a.getExamples());

当我在创建Translations对象之后立即调用查询方法时,说明,useCases和示例为null,因为查询尚未完成。后来,它可以正常工作。

我想等到Translations对象完成且查询完成并且“准备使用”没有任何空变量。然后我要设置一些文本。怎么做?

注意:我知道在Activity上调用查询方法不是最好的主意。它应该在Translations.class内部,但我不知道如何正确编写。

注意2:在查询方法中使新的Translation对象正确吗?我有些疑问,因为此方法位于Translations.class

0 个答案:

没有答案