Я работаю со службой и деятельностью. Когда я пытаюсь отправить данные из службы в Firebase, моя деятельность перезапускается, но если я пытаюсь показать результат службы, он отображается правильно. Я не получаю ошибок. Я пробовал использовать разные способы сохранения данных, но все равно не работает. Также, когда я пытаюсь добавить нового пользователя со стороны сервера, моя деятельность перезапускается. Вот мой код для сохранения широты и долготы.
public class HomeTaksistFragment extends Fragment implements OnMapReadyCallback {
GoogleMap mGoogleMap;
MapView mapView;
TextView status,ime,prezime,broj;
private LocationRequest mLocationRequest;
Marker mCurrent;
//private MyReceiver myReceiver;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View mView = inflater.inflate(R.layout.fragment_home_taksist, container, false);
status = mView.findViewById(R.id.status);
ime = mView.findViewById(R.id.ime);
prezime = mView.findViewById(R.id.prezime);
broj = mView.findViewById(R.id.broj);
// myReceiver = new MyReceiver();
if (ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}, 18);
} else {
requestLocation();
}
readStatus();
return mView;
}
private void requestLocation() {
mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(5000);
mLocationRequest.setFastestInterval(3000);
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
if (ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
LocationServices.getFusedLocationProviderClient(getActivity()).requestLocationUpdates(mLocationRequest,locationCallback,Looper.getMainLooper());
}
private LocationCallback locationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
super.onLocationResult(locationResult);
if (locationResult != null && locationResult.getLastLocation() != null) {
double latitude = locationResult.getLastLocation().getLatitude();
double longitude = locationResult.getLastLocation().getLongitude();
if(mCurrent != null){
mCurrent.remove();
}
mCurrent = mGoogleMap.addMarker(new MarkerOptions().position(new LatLng(latitude,longitude)).title("NOW"));
mGoogleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(latitude,longitude),15.0f));
try {
FirebaseDatabase.getInstance().getReference().child("Vraboteni").child(String.valueOf(Common.currentTaksist.getId())).child("latitude").setValue(latitude);
FirebaseDatabase.getInstance().getReference().child("Vraboteni").child(String.valueOf(Common.currentTaksist.getId())).child("longitude").setValue(longitude);
} catch (Exception e){
Toast.makeText(getContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
}
}
}
};
private void readStatus() {
String id = String.valueOf(Common.currentTaksist.getId());
FirebaseDatabase.getInstance().getReference().child("Vraboteni").child(id).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String dStatus = String.valueOf(dataSnapshot.child("status").getValue(Integer.class));
status.setText(Common.convertCodeToStatus(dStatus));
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
@Override
public void onViewCreated(View view,Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mapView = (MapView) view.findViewById(R.id.map);
if(mapView != null){
mapView.onCreate(null);
mapView.onResume();
mapView.getMapAsync(this);
}
}
@Override
public void onMapReady(GoogleMap googleMap) {
mGoogleMap = googleMap;
}
}
, и я получаю эту ошибку после перезапуска
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.taxiba, PID: 1059
java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.android.gms.maps.model.Marker com.google.android.gms.maps.GoogleMap.addMarker(com.google.android.gms.maps.model.MarkerOptions)' on a null object reference
at com.example.taxiba.Taksist.HomeTaksistFragment$1.onLocationResult(HomeTaksistFragment.java:118)
at com.google.android.gms.internal.location.zzau.notifyListener(Unknown Source:4)
at com.google.android.gms.common.api.internal.ListenerHolder.notifyListenerInternal(com.google.android.gms:play-services-base@@17.1.0:17)
at com.google.android.gms.common.api.internal.ListenerHolder$zaa.handleMessage(com.google.android.gms:play-services-base@@17.1.0:6)
at android.os.Handler.dispatchMessage(Handler.java:107)
at com.google.android.gms.internal.base.zar.dispatchMessage(com.google.android.gms:play-services-base@@17.1.0:8)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:7948)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1075)
Я тоже пробовал с GeoFire, но не могу решить эту проблему.