Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.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
Android 在GeoFire和Firebase查询中执行函数时出错_Android_Arraylist_Firebase_Geofire - Fatal编程技术网

Android 在GeoFire和Firebase查询中执行函数时出错

Android 在GeoFire和Firebase查询中执行函数时出错,android,arraylist,firebase,geofire,Android,Arraylist,Firebase,Geofire,我正在使用Firebase查询附近的位置,当我进行系统打印时,结果是正确的。但当我试图创建一个新的位置项并将其放入一个全局声明的arrayList中,然后循环通过arrayList来打印它。它不打印。我用一个哈希集做了类似的尝试,我声明了一个全局哈希集,并尝试向其中添加id和地理位置,然后循环使用,结果没有打印出来 这是我执行系统打印时的打印输出: 03-05 21:42:16.225 12604-12604/? I/System.out: aa6b6c55-40da-416e-bbc0-626

我正在使用Firebase查询附近的位置,当我进行系统打印时,结果是正确的。但当我试图创建一个新的位置项并将其放入一个全局声明的arrayList中,然后循环通过arrayList来打印它。它不打印。我用一个哈希集做了类似的尝试,我声明了一个全局哈希集,并尝试向其中添加id和地理位置,然后循环使用,结果没有打印出来

这是我执行系统打印时的打印输出:

03-05 21:42:16.225 12604-12604/? I/System.out: aa6b6c55-40da-416e-bbc0-626f10d2db80 51.02878131 -114.13542057
03-05 21:42:16.262 12604-12604/? I/System.out: 1f682c8b-be9a-4310-aa92-216f041f0547 51.02933723 -114.13514678
03-05 21:42:16.262 12604-12604/? I/System.out: 707a5af3-8fa0-4f69-b88f-593a0acd3ee8 51.02933723 -114.13514678
我将此arrayList设置为全局

List<Locations> locationList;


in onCreate(){
......
locationList = new ArrayList<>();
......
}



 geoFire = new GeoFire(new Firebase("https://xyz.firebaseio.com/locations/"));

        GeoLocation center = new GeoLocation(location.getLatitude(), location.getLongitude());
 final HashSet hs = new HashSet();
        GeoQuery geoQuery = geoFire.queryAtLocation(center, 5);
        geoQuery.addGeoQueryEventListener(new GeoQueryEventListener() {
            @Override
            public void onKeyEntered(String username, GeoLocation location) {

                System.out.println(username + location.latitude + location.longitude);

                Locations eachLocation = new Locations();
                eachLocation.setId(username);
                eachLocation.setLatitude(String.valueOf(location.latitude));
                eachLocation.setLongitude(String.valueOf(location.longitude));

                locationList.add(eachLocation);


//
//                }

            }

            @Override
            public void onKeyExited(String username) {
                usersNearby.remove(username);
                // additional code, like removing a pin from the map
                // and removing any Firebase listener for this user
            }
            @Override
            public void onKeyMoved(String s, GeoLocation geoLocation) {

            }

            @Override
            public void onGeoQueryReady() {

            }

            @Override
            public void onGeoQueryError(FirebaseError firebaseError) {

            }
        });

    for (Locations x: locationList){
        Log.i("eachLocation", x.getId() + x.getLatitude() + x.getLongitude());
    }
System.out.println(hs);
}

*****更新-我还注意到另一种模式,我无法在另一个Firebase查询中执行函数****

我声明了一个全局userCountry变量userCountry,然后对 获取用户保存的国家/地区。在函数内部,它的日志记录良好。但是,当我尝试将country值设置为userCountry,并将其记录在查询之外时,我的应用程序崩溃并在NullPointerException上出错。我需要全局设置userCountry,以便将其作为参数输入到另一个查询中

String userCountry;


 ref = new Firebase("https://xyzChat.firebaseio.com/users/" + intent.getStringExtra("userId") + "/country");

    Query queryRef = ref.orderByChild("country");

        queryRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                Log.i("userCountry", String.valueOf(dataSnapshot.getValue()));
                userCountry = String.valueOf(dataSnapshot.getValue());
            }
Log.i(“第二用户国家”,用户国家)

重写“Location”类中的toString()方法。。 在“Location”类中添加此代码

现在更改代码..删除循环..而不是此代码

Log.i("eachLocation", x.getId() + x.getLatitude() + x.getLongitude());
就用

Log.i ("eachLocation",hs);

现在您的代码应该可以正常工作了…

事件在GeoFire中异步触发。因此,当您打印出
locationList
时,它仍然是空的。您需要等待,直到调用了
onGeoQueryReady
,直到添加了所有元素。如果您将日志代码移到其中,它将打印所有位置。请注意,每次更新查询时都会调用
onGeoQueryReady

您的意思是说for循环
for(Locations x:locationList){
没有打印项目吗?@Abdullah,是的,是循环没有打印。您在
onKeyEntered
中获取数据,该数据将在某个时间后被调用,并在设置
GeoQueryEventListener
后立即打印列表。该调用是异步的。@Abdullah在onKeyEntered中,该调用应在以后立即被调用doc-,if“密钥的位置现在与查询条件匹配。”并且由于我存储的位置在我的搜索条件中,因此应该立即调用它。当我执行systemPrint时,它已打印。但它不会加载到我的ArrayList中。是否检查logcat.。for循环中的项应在logcat中打印。。
Log.i("eachLocation", x.getId() + x.getLatitude() + x.getLongitude());
Log.i ("eachLocation",hs);