Рассчитать расстояние между координатами внутри запроса Firebase - PullRequest
0 голосов
/ 06 октября 2019

Я пытаюсь выполнить следующий поиск + расчет в моем приложении:

  1. найти в базе данных, у кого есть элемент

  2. если у кого-то есть предмет -> найти в базе данных его местонахождение

  3. вычислить расстояние между мной и пользователем, у которого есть этот предмет.

Я делаю следующий запрос:

private void WhoHasItemAroundMe(Object Lat, Object Lon, int Radius){
    FirebaseFirestore db = FirebaseFirestore.getInstance();
    db.collection("Items").whereEqualTo("ItemID", itemID).get()
        .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                if (task.isSuccessful()) {
                    for (QueryDocumentSnapshot document : task.getResult()) {
                        Toast.makeText(LocationsActivity.this, "ID" +document.getData().get( "UserID" ), Toast.LENGTH_SHORT).show();
                        db.collection("Users").document(document.getData().get( "UserID" ).toString()).collection( "Location" ).get()
                                .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                                    @Override
                                    public void onComplete(@NonNull Task<QuerySnapshot> task) {
                                        if (task.isSuccessful()) {
                                            for (QueryDocumentSnapshot document : task.getResult()) {
                                                Toast.makeText(LocationsActivity.this, "LAT" +document.getData().get( "Lat" ) + "LON" + document.getData().get( "Lon" ), Toast.LENGTH_SHORT).show();

                                                GoalLocation.setLatitude(Double.valueOf(document.getData().get( "Lat" ).toString()));
                                                GoalLocation.setLongitude(Double.valueOf(document.getData().get( "Lon" ).toString()));
                                                MyLocation.setLatitude(Double.valueOf( Lat.toString()));
                                                MyLocation.setLongitude(Double.valueOf( Lon.toString()));



                                            }
                                        } else {
                                            Log.d("ERROR", "Error getting documents: ", task.getException());
                                        }
                                    }
                                });
                    }
                } else {
                    Log.d("ERROR", "Error getting documents: ", task.getException());
                }
            }
        });
}

Однако по какой-то причине я продолжаю получать следующую ошибку:

java.lang.NullPointerException: попытка вызвать виртуальный метод 'void android.location.Location.setLatitude (double) 'для нулевой ссылки на объект

Дело в том, что когда я использовал Toast(Lat), я получаю результат, поэтому не могу понять, почему он это говоритявляется нулевым.

...