Активность просочилась в окно DecorView @ 92f9f38 [], которое изначально было добавлено здесь ошибка - PullRequest
0 голосов
/ 26 апреля 2018

Я написал код для загрузки рядом с hospitals, restaurants и schools в картах Google. Я использую эти зависимости: implementation 'com.google.android.gms:play-services-maps:15.0.0' и implementation 'com.google.android.gms:play-services-location:15.0.0'. Я использую Gradle 3.0.0. Когда я запускаю свой код, я получаю эту ошибку:

Activity has leaked window DecorView@92f9f38[] that was originally added here
   at android.view.ViewRootImpl.<init>(ViewRootImpl.java:417)
   at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:331)
   at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93)
   at android.app.Dialog.show(Dialog.java:316)
   at com.dell.spacestemp.ui.Activities.NearByActivity.CheckGooglePlayServices(NearByActivity.java:81)
   at com.dell.spacestemp.ui.Activities.NearByActivity.onCreate(NearByActivity.java:61)
   at android.app.Activity.performCreate(Activity.java:6662)
   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)
   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
   at android.app.ActivityThread.-wrap12(ActivityThread.java)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:154)
   at android.app.ActivityThread.main(ActivityThread.java:6077)
   at java.lang.reflect.Method.invoke(Native Method)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)  

Эта ошибка происходит в этом блоке кода:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);

        if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            checkLocationPermission();
        }

        //Check if Google Play Services Available or not
        if (!CheckGooglePlayServices()) {
            Log.d("onCreate", "Finishing test case since Google Play Services are not available");
            finish();
        }
        else {
            Log.d("onCreate","Google Play Services available.");
        }

        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }



private boolean CheckGooglePlayServices() {
        GoogleApiAvailability googleAPI = GoogleApiAvailability.getInstance();
        int result = googleAPI.isGooglePlayServicesAvailable(this);
        if(result != ConnectionResult.SUCCESS) {
            if(googleAPI.isUserResolvableError(result)) {
                googleAPI.getErrorDialog(this, result,
                        0).show();
            }
            return false;
        }
        return true;
    }  

Как я могу это исправить? Что вызывает это? Почему это происходит?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Я думаю, что ваш код пытается получить контекст после уничтожения действия

0 голосов
/ 26 апреля 2018

Поместите фрагмент кода транзакции в остальную часть

if (!CheckGooglePlayServices()) {
 ......
}
else {
    Log.d("onCreate","Google Play Services available.");
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
}

Или вы можете попробовать;

if(!((Activity)YourActivity.this).isFinishing()) {
     SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
     mapFragment.getMapAsync(this);
}

В приведенном ниже коде для выполнения используется отдельный поток.

  int result = googleAPI.isGooglePlayServicesAvailable(this);

Это произошло из-за того, что ваша деятельность заканчивается во время транзакции фрагмента !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...