yandex / mapkit-android-demo

MapKit Android demo

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Yandex mapkit Native object's weak_ptr for EA5nkWvGMVmd1MHBOifh has expired

fenrir-afk opened this issue · comments

Создал Navigation drawer проект и при переходе из home фрагмента(там работаем с картами) в любой другой фрагмент, а потом обратно то приложение крашится с ошибкой( при переходе между другими фрагментами такой ошибки нет):
va.lang.RuntimeException: java.lang.RuntimeException: Native object's weak_ptr for EA5nkWvGMVmd1MHBOifh has expired
Exception stack trace (top 20 entries):
# 0: 7880855 /data/app/~~7CLH_GAxTa-62nRQsqaNSw==/com.example.umap-oA6GWj4sedsKWcvSvs1RvA==/base.apk!/lib/x86_64/libmaps-mobile.so
# 1: 7913816 /data/app/~~7CLH_GAxTa-62nRQsqaNSw==/com.example.umap-oA6GWj4sedsKWcvSvs1RvA==/base.apk!/lib/x86_64/libmaps-mobile.so
# 2: 7913654 /data/app/~~7CLH_GAxTa-62nRQsqaNSw==/com.example.umap-oA6GWj4sedsKWcvSvs1RvA==/base.apk!/lib/x86_64/libmaps-mobile.so
# 3: 7909702 /data/app/~~7CLH_GAxTa-62nRQsqaNSw==/com.example.umap-oA6GWj4sedsKWcvSvs1RvA==/base.apk!/lib/x86_64/libmaps-mobile.so
# 4: 7909495 /data/app/~~7CLH_GAxTa-62nRQsqaNSw==/com.example.umap-oA6GWj4sedsKWcvSvs1RvA==/base.apk!/lib/x86_64/libmaps-mobile.so
# 5: 7911815 /data/app/~~7CLH_GAxTa-62nRQsqaNSw==/com.example.umap-oA6GWj4sedsKWcvSvs1RvA==/base.apk!/lib/x86_64/libmaps-mobile.so
# 6: 13633360 /data/app/~~7CLH_GAxTa-62nRQsqaNSw==/com.example.umap-oA6GWj4sedsKWcvSvs1RvA==/base.apk!/lib/x86_64/libmaps-mobile.so
# 7: 13803060 /data/app/~~7CLH_GAxTa-62nRQsqaNSw==/com.example.umap-oA6GWj4sedsKWcvSvs1RvA==/base.apk!/lib/x86_64/libmaps-mobile.so
# 8: 13803136 /data/app/~~7CLH_GAxTa-62nRQsqaNSw==/com.example.umap-oA6GWj4sedsKWcvSvs1RvA==/base.apk!/lib/x86_64/libmaps-mobile

Мой код:
Main

Мой код:

public class MainActivity extends AppCompatActivity {

private AppBarConfiguration mAppBarConfiguration;
private ActivityMainBinding binding;
private final String MAPKIT_API_KEY = "8e987421-4a2a-469c-aa6e-1d3fe606404a";
private Boolean initialized = false;

@OverRide
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (initialized == false && savedInstanceState == null)
initialize(MAPKIT_API_KEY);
binding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
setSupportActionBar(binding.appBarMain.toolbar);
binding.appBarMain.fab.setOnClickListener(new View.OnClickListener() {
@OverRide
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
DrawerLayout drawer = binding.drawerLayout;
NavigationView navigationView = binding.navView;
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
mAppBarConfiguration = new AppBarConfiguration.Builder(
R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow)
.setOpenableLayout(drawer)
.build();
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_content_main);
NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
NavigationUI.setupWithNavController(navigationView, navController);
}

@OverRide
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

@OverRide
public boolean onSupportNavigateUp() {
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_content_main);
return NavigationUI.navigateUp(navController, mAppBarConfiguration)
|| super.onSupportNavigateUp();
}

//Метод нужен чтобы при перевороте экрана
// ключ не устанавливался вновь(Это ведет к ошибкам)
@OverRide
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putBoolean("init", true);

}
public boolean initialize(String apiKey) {
MapKitFactory.setApiKey(MAPKIT_API_KEY);
MapKitFactory.initialize(getApplicationContext());
initialized = true;
return initialized;
}
}

Код фрагмента:

public class HomeFragment extends Fragment {
private final String MAPKIT_API_KEY = "8e987421-4a2a-469c-aa6e-1d3fe606404a";
private static final double DESIRED_ACCURACY = 0;
private static final long MINIMAL_TIME = 0;
private static final double MINIMAL_DISTANCE = 0;
private static final boolean USE_IN_BACKGROUND = false;
public static final int COMFORTABLE_ZOOM_LEVEL = 18;
private MapView mapView;
private LocationManager locationManager;
private LocationListener myLocationListener;
private Point myLocation;
private PlacemarkMapObject Now_Geoposition;
//private Boolean initialized = false;
private Boolean initialized = false;

private FragmentHomeBinding binding;

public View onCreateView(@nonnull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
HomeViewModel homeViewModel =
new ViewModelProvider(this).get(HomeViewModel.class);
binding = FragmentHomeBinding.inflate(inflater, container, false);
View root = binding.getRoot();
checkPermission();

locationManager = MapKitFactory.getInstance().createLocationManager();
myLocationListener = new LocationListener() {
    @Override
    public void onLocationUpdated(Location location) {
        if (myLocation == null) {
            moveCamera(location.getPosition(), COMFORTABLE_ZOOM_LEVEL);
            myLocation = location.getPosition();
            Now_Geoposition = binding.mapview.getMapWindow().getMap().getMapObjects().addPlacemark(myLocation, ImageProvider.fromResource(getApplicationContext(), R.drawable.arrow));
        }
        if (myLocation != location.getPosition()){
            myLocation = location.getPosition();
            Now_Geoposition.setGeometry(myLocation);
        }

    }
    @Override
    public void onLocationStatusUpdated(LocationStatus locationStatus) {
        if (locationStatus == LocationStatus.NOT_AVAILABLE) {
            System.out.println("LocationStatus is NotAvailable");
        }
    }
};
return root;

}

@OverRide
public void onDestroyView() {
super.onDestroyView();
binding = null;
}

@OverRide
public void onStart() {
super.onStart();
MapKitFactory.getInstance().onStart();
binding.mapview.onStart();
subscribeToLocationUpdate();
}

Лишняя проверка в home fragment