Java onDataChange方法中的空变量

Java onDataChange方法中的空变量,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我目前正在开发一个android应用程序,其中我使用firebase作为数据库,但是当我在onDataChange方法中获得变量并将它们分配给全局变量时,我得到了空变量,但是当我在onDataChange方法中调用这些变量时,它们不是空的 public class PositionateMarkerTask extends AsyncTask { public ArrayList<Location> arrayList= new ArrayList<>();

我目前正在开发一个android应用程序,其中我使用firebase作为数据库,但是当我在
onDataChange
方法中获得变量并将它们分配给全局变量时,我得到了空变量,但是当我在
onDataChange
方法中调用这些变量时,它们不是空的

public class PositionateMarkerTask extends AsyncTask {
    public ArrayList<Location> arrayList= new ArrayList<>();
    public void connect() {
        //setting connexion parameter
        final Firebase ref = new Firebase("https://test.firebaseio.com/test");
        Query query = ref.orderByChild("longitude");

        //get the data from the DB
        query.addListenerForSingleValueEvent(new ValueEventListener() {

            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                //checking if the user exist
                if(dataSnapshot.exists()){
                    for (DataSnapshot userSnapshot : dataSnapshot.getChildren()) {
                        //get each user which has the target username
                        Location location =userSnapshot.getValue(Location.class);
                            arrayList.add(location);
                        //if the password is true , the data will be storaged in the sharedPreferences file and a Home activity will be launched
                    }
                }
                else{
                    System.out.println("not found");
                }
            }

            @Override
            public void onCancelled(FirebaseError firebaseError) {
                  System.out.println("problem ");

            }
        });
    }

    @Override
    protected Object doInBackground(Object[] params) {
        connect();
        return null;
    }

    @Override
    protected void onPostExecute(Object o) {
        super.onPostExecute(o);

        System.out.println("the firs long is"+arrayList.get(0).getLongitude());

    }
}
public类位置标记任务扩展异步任务{
public ArrayList ArrayList=新的ArrayList();
公共void connect(){
//设置连接参数
最终火基参考=新火基(“https://test.firebaseio.com/test");
Query Query=ref.orderByChild(“经度”);
//从数据库中获取数据
query.addListenerForSingleValueEvent(新的ValueEventListener()){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
//检查用户是否存在
if(dataSnapshot.exists()){
对于(DataSnapshot userSnapshot:DataSnapshot.getChildren()){
//获取具有目标用户名的每个用户
Location Location=userSnapshot.getValue(Location.class);
arrayList.add(位置);
//如果密码为true,则数据将存储在SharedReferences文件中,并启动Home活动
}
}
否则{
System.out.println(“未找到”);
}
}
@凌驾
取消后的公共无效(FirebaseError FirebaseError){
System.out.println(“问题”);
}
});
}
@凌驾
受保护对象doInBackground(对象[]参数){
connect();
返回null;
}
@凌驾
受保护的void onPostExecute(对象o){
super.onPostExecute(o);
System.out.println(“第一个长度是”+arrayList.get(0.getLongitude());
}
}

就连我也遇到了同样的问题。只需将onDataChange中的arraylist值传递给另一个方法

 myFirebaseRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            Log.d("FIREBASE",String.valueOf(dataSnapshot.getChildrenCount()));


            if (dataSnapshot.exists()){

                for (DataSnapshot snapshot : dataSnapshot.getChildren()){

                    Log.d("FIREBASE ","FOR LOOP");


                    //Arraylist codes
                    iosTitleVal.add(snapshot.getKey().toString());
                    iosDescVal.add(snapshot.getValue().toString());
                    Log.d("FIREBASE","ArrayList KEY IS "+iosTitleVal);

                 //Passing arraylist values to another method 
                    storageContainer(iosTermTitle,iosTermDesc);

                }

            }else {

                Log.d("FIREBASE","NO DATAS");

            }

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
这是我的存储容器方法。在这个方法中,我将arrraylist值传递给RecyclerView适配器的构造函数

public void storageContainer(ArrayList<String> arrayListTitle, ArrayList<String> arrayListDesc){


   iosTitleStorage = arrayListTitle;
   iosDescStorage = arrayListDesc;


    //No null exception here...
     Log.d("FIREBASE"," My Data KEY "+iosTitleStorage +" and VAL "+iosDescStorage);

 }
public void storageContainer(ArrayList arrayListTitle,ArrayList arrayListDesc){
iosTitleStorage=arrayListTitle;
iosDescStorage=arrayListDesc;
//这里没有空异常。。。
Log.d(“FIREBASE”、“我的数据键”+iosTitleStorage+”和VAL“+IOSDESSTORAGE”);
}

我希望它能工作

你能提供你的数据库结构吗?