Java onDataChange方法中的空变量
我目前正在开发一个android应用程序,其中我使用firebase作为数据库,但是当我在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<>();
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”);
}
我希望它能工作你能提供你的数据库结构吗?