Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java类中传递值_Java_Android - Fatal编程技术网

在Java类中传递值

在Java类中传递值,java,android,Java,Android,我对firebase数据库中的值和显示它们的简单文本视图有问题 public class FindReportActivity extends Activity implements View.OnClickListener{ EditText editTextFindReport; TextView textViewCommento; TextView textViewGravita; ImageView imageViewFindReport; St

我对firebase数据库中的值和显示它们的简单文本视图有问题

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中?还是在活动中?