在Java类中传递值
我对firebase数据库中的值和显示它们的简单文本视图有问题在Java类中传递值,java,android,Java,Android,我对firebase数据库中的值和显示它们的简单文本视图有问题 public class FindReportActivity extends Activity implements View.OnClickListener{ EditText editTextFindReport; TextView textViewCommento; TextView textViewGravita; ImageView imageViewFindReport; St
public class FindReportActivity extends Activity implements View.OnClickListener{
EditText editTextFindReport;
TextView textViewCommento;
TextView textViewGravita;
ImageView imageViewFindReport;
String cdt;
Report report;
ReportDAO reportDAO = new ReportDAO();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_find_report);
imageViewFindReport = (ImageView) findViewById(R.id.imageViewFindReport);
editTextFindReport = (EditText) findViewById(R.id.editTextCDT);
textViewCommento= (TextView) findViewById(R.id.textViewcommento);
textViewGravita= (TextView) findViewById(R.id.textViewgravita);
imageViewFindReport.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if( v == imageViewFindReport){
cdt = editTextFindReport.getText().toString().trim();
textViewCommento.setText(reportDAO.findReport(cdt));
}
}
}
这是我的班级
public class ReportDAO {
private FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
private DatabaseReference databaseReference = firebaseDatabase.getReference();
String commento = "non";
public ReportDAO(){ }
public String findReport(String cdt){
DatabaseReference refReport = databaseReference.child("Report").child(cdt).child("commento");
refReport.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
commento = dataSnapshot.getValue(String.class);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
return commento;
}
当我单击imageview时,第一次为空,第二次为正确值。。。为什么?您需要实现一个等待commento可用的侦听器,因为findReport方法是异步工作的。对不起,对于测试,我已将commento指定为“non”,第一次是“non”,第二次是正确的。您只为
refReport
设置了一个侦听器,但这并不意味着该值是立即设置的,因此,无法使用相同的方法返回。我建议首先尝试理解侦听器的概念,然后考虑将值传递给您的视图。为此,请查看MVP或MVVM体系结构模型,它们定义了应如何传递值。一个很好的起点是,我的andorid studio不可能使用API 27(Oreo)进行工作,我也不可能使用andorid 7.1在手机上进行调试?不,没关系。你通常有一个尽可能高的目标SDK,但应用程序当然在旧设备上运行(因为你不使用新android版本中添加的API)。我被卡住了,我怎么能在我的refReport上实现一个成功的监听器?在reportDAO中?还是在活动中?