android中的这个程序无法访问数组

时间:2017-09-17 06:00:38

标签: android firebase firebase-realtime-database

我已全局声明了一个数组地址,并将数据放在以下代码中的数组中

    DatabaseReference rootRe = FirebaseDatabase.getInstance().getReference();
    count=0;
    for( int i = 0 ; i<base.length;i++){
        DatabaseReference assaultRef = rootRe.child(base[i]);


        ValueEventListener eventListener = new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for(DataSnapshot ds : dataSnapshot.getChildren()) {
                    String latlng = ds.child("liststring").child("0").getValue(String.class);
                    //address.add(latlng);
                    address[count] = latlng;
                    Log.i("Address","Address["+count+"]= "+address[count]);
                    count++;

                    //Toast.makeText(MainActivity.this, address.length, Toast.LENGTH_SHORT).show();
                }

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {}
        };
        assaultRef.addListenerForSingleValueEvent(eventListener);
    }
    //for (int i = 0 ; i<10;i++)
    Log.i("Address[0]","Address[0]= "+address[0]);

我的问题是在toast之前它在地址中显示值,但在最后一个Log.i()地址值显示为null。

1 个答案:

答案 0 :(得分:0)

注册侦听器后立即调用Log.i("Address[0]","Address[0]= "+address[0]);方法,但数据更改时会完成数组填充,从而导致调用onDataChange()方法。注册后必须发生这种情况。调试它的一个好方法是在onDataChange方法和log.i()方法之后添加print语句,并观察方法调用的顺序。