从addValueEventListener Firebase中检索字符串

Nic*_*ari 1 string android firebase firebase-realtime-database

我想从addValueEventListener()我用来从数据库Firebase转售数据的方法中收到一个字符串.数据正确到达.

但是当确定从该方法中获取字符串以在另一个方法中使用它时,它什么也不返回.

你有提示吗?

我已经尝试过putExtras并且还有意创建了一个方法,但它没有用.

final DatabaseReference mPostReference = FirebaseDatabase.getInstance().getReference().child("user-daily").child(getUid()).child("2017-Year");
mPostReference.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        final ArrayList<String> labels = new ArrayList<String>();
        for (DataSnapshot data : dataSnapshot.getChildren()){
            final DailyItem dailyItem = data.getValue(DailyItem.class);
            labels.add(dailyItem.mese);



        }
        title.setText(labels.get(position));

        a = title.getText().toString();
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Toast.makeText(view.getContext(),"database error",
                Toast.LENGTH_SHORT).show();
    }
});

//this return null... why?
String title = a;
Run Code Online (Sandbox Code Playgroud)

Fra*_*len 5

数据是从Firebase异步加载的.到运行时title = a,该onDataChange方法尚未被调用.在调试器中设置一些断点来验证这一点,这是理解异步加载如何工作的关键.

解决方案是重新解决你的问题,从"首先得到对象,然后用标题做blabla"来"开始获取对象;一旦对象可用,就用标题做blabla".

在代码中,这转换为:

final DatabaseReference mPostReference = FirebaseDatabase.getInstance().getReference().child("user-daily").child(getUid()).child("2017-Year");
mPostReference.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        final ArrayList<String> labels = new ArrayList<String>();
        for (DataSnapshot data : dataSnapshot.getChildren()){
            final DailyItem dailyItem = data.getValue(DailyItem.class);
            labels.add(dailyItem.mese);



        }
        title.setText(labels.get(position));

        // Do blabla with the title
        String title = title.getText().toString();
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Toast.makeText(view.getContext(),"database error",
                Toast.LENGTH_SHORT).show();
    }
});
Run Code Online (Sandbox Code Playgroud)

许多开发人员对Firebase(以及其他现代Web API,因为他们都以这种方式工作)不熟悉这个问题.所以我建议你也看看他们的问题和答案:


归档时间:

查看次数:

5813 次

最近记录:

7 年,4 月 前