我正在创建一个对象。有些变量是在应用程序内创建的,而有些变量是在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
中