Я пытаюсь выполнить следующий поиск + расчет в моем приложении:
найти в базе данных, у кого есть элемент
если у кого-то есть предмет -> найти в базе данных его местонахождение
вычислить расстояние между мной и пользователем, у которого есть этот предмет.
Я делаю следующий запрос:
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)
, я получаю результат, поэтому не могу понять, почему он это говоритявляется нулевым.