Я пытаюсь разделить код на части, так как он немного громоздкий, у меня есть ActivityContainer, который отображается во всем приложении, содержит верхнюю и нижнюю панель навигации и просто изменяет фрагменты в центре. В настоящее время я использую этот класс для обработки настройки местоположения пользователя через getFusedLocationProviderClient. Я хочу создать отдельный класс LocationHandler для решения этой проблемы, однако для этого требуется контекст или действие.
Это LocationHandler
public LocationHandler(Context context){
this.context = context;
}
private Context context;
private DatabaseReference gRef = FirebaseDatabase.getInstance().getReference("data/geofire/");
public FusedLocationProviderClient fusedLocationClient = LocationServices.getFusedLocationProviderClient(context);
final GeoFire geoFire = new GeoFire(gRef);
private Location mLocation;
private DatabaseReference iRef = FirebaseDatabase.getInstance().getReference("data").child("instruments").child(FirebaseAuth.getInstance().getCurrentUser().getUid());
private static final int REQUEST_LOCATION = 0;
private static final int REQUEST_LOCATION_PERMISSION = 0;
@SuppressLint("MissingPermission")
public void getLocation() {
try {
fusedLocationClient.getLastLocation()
.addOnSuccessListener(new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
mLocation = location;
// if (!mLocation.equals(null)) {
//Set Users location for retrieval
geoFire.setLocation(FirebaseAuth.getInstance().getCurrentUser().getUid(), new GeoLocation(mLocation.getLatitude(), mLocation.getLongitude()), new GeoFire.CompletionListener() {
@Override
public void onComplete(String key, DatabaseError error) {
Log.e("Location", "Success");
}
});
// }
iRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot ds : dataSnapshot.getChildren()) {
if (!ds.getValue().toString().equals("")) {
//For each instrument user lists, add a location, duplicate data but denormalized.
geoFire.setLocation(ds.getKey() + "/" + FirebaseAuth.getInstance().getCurrentUser().getUid(), new GeoLocation(mLocation.getLatitude(), mLocation.getLongitude()), new GeoFire.CompletionListener() {
@Override
public void onComplete(String key, DatabaseError error) {
Log.d("Instrument location Logged: ", "Success");
}
});
} else {
DatabaseReference tRef = FirebaseDatabase.getInstance().getReference("data/geofire/" + ds.getKey())
.child(FirebaseAuth.getInstance().getCurrentUser().getUid());
tRef.removeValue();
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
//TODO: handle onCancelled
}
});
}
});
} catch (SecurityException e) {
System.out.println("Error: " + e.toString());
}
}
Это мой ActivityContainer
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_container);
Context context = getApplicationContext();
lHandler = new LocationHandler(context);
Я получаю
'java.lang.RuntimeException: невозможно запустить действие ComponentInfo {package / package.ActivityContainer}: java.lang.NullPointerException: пустой контекст не разрешен.'
Я пробовал разные способы передачи действий и контекстов безуспешно