17

używam AdWhirl i AdMob w jednym z mojej aplikacji, po zwolnieniu, otrzymujemy dużo błędów z AdWhirl, a to łatwo rozmnażać tak:AdWhirl powodując java.lang.NullPointerException po sieci zamykania

Po pojawić się reklama , Zamykam Wi-Fi i czekam na limit czasu reklamy, a następnie naciśnij przycisk Wstecz, aby zamknąć aplikację.

to bug appear.the src można pobrać ze this .and wyjątek jest tak:.

05-17 11:00:13.265: E/AndroidRuntime(12482): java.lang.RuntimeException: Unable to destroy activity {me.test.admob/me.test.admob.AdWhirlTestActivity}: java.lang.NullPointerException 
05-17 11:00:13.265: E/AndroidRuntime(12482): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3112) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3130) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at android.app.ActivityThread.access$1200(ActivityThread.java:123) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1180) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at android.os.Handler.dispatchMessage(Handler.java:99) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at android.os.Looper.loop(Looper.java:137) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at android.app.ActivityThread.main(ActivityThread.java:4424) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at java.lang.reflect.Method.invokeNative(Native Method) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at java.lang.reflect.Method.invoke(Method.java:511) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at dalvik.system.NativeStart.main(Native Method) 
05-17 11:00:13.265: E/AndroidRuntime(12482): Caused by: java.lang.NullPointerException 
05-17 11:00:13.265: E/AndroidRuntime(12482): at android.webkit.WebView.requestFocus(WebView.java:7650) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at android.view.ViewGroup.onRequestFocusInDescendants(ViewGroup.java:2154) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at android.view.ViewGroup.requestFocus(ViewGroup.java:2110) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at android.view.ViewGroup.onRequestFocusInDescendants(ViewGroup.java:2154) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at android.view.ViewGroup.requestFocus(ViewGroup.java:2110) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at android.view.ViewGroup.onRequestFocusInDescendants(ViewGroup.java:2154) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at android.view.ViewGroup.requestFocus(ViewGroup.java:2110) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at android.view.ViewGroup.onRequestFocusInDescendants(ViewGroup.java:2154) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at android.view.ViewGroup.requestFocus(ViewGroup.java:2110) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at android.view.ViewGroup.onRequestFocusInDescendants(ViewGroup.java:2154) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at android.view.ViewGroup.requestFocus(ViewGroup.java:2110) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at android.view.ViewGroup.onRequestFocusInDescendants(ViewGroup.java:2154) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at android.view.ViewGroup.requestFocus(ViewGroup.java:2110) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at android.view.ViewGroup.onRequestFocusInDescendants(ViewGroup.java:2154) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at android.view.ViewGroup.requestFocus(ViewGroup.java:2113) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at android.view.View.requestFocus(View.java:5323) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at android.view.ViewRootImpl.clearChildFocus(ViewRootImpl.java:2200) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at android.view.ViewGroup.clearChildFocus(ViewGroup.java:669) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at android.view.ViewGroup.clearChildFocus(ViewGroup.java:669) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at android.view.ViewGroup.clearChildFocus(ViewGroup.java:669) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at android.view.ViewGroup.clearChildFocus(ViewGroup.java:669) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at android.view.ViewGroup.clearChildFocus(ViewGroup.java:669) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at android.view.ViewGroup.removeViewInternal(ViewGroup.java:3591) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at android.view.ViewGroup.removeViewInternal(ViewGroup.java:3561) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at android.view.ViewGroup.removeView(ViewGroup.java:3509) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:998) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1080) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at android.support.v4.app.FragmentManagerImpl.dispatchDestroy(FragmentManager.java:1843) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at android.support.v4.app.FragmentActivity.onDestroy(FragmentActivity.java:314) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at android.app.Activity.performDestroy(Activity.java:4629) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1079) 
05-17 11:00:13.265: E/AndroidRuntime(12482): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3099) 
05-17 11:00:13.265: E/AndroidRuntime(12482): ... 11 more 

Po moim teście znajdę wyjątek ten pojawia się tylko w przypadku gdy stosuje AdWhirl z ListFragment w ViewPager, jeśli Używam tylko w ListFragment lub używam Fragment w ViewPager, To działa normalnie. Ale nadal chcę wiedzieć, co jest nie tak i jak mogę rozwiązać ten wyjątek.

Każda odpowiedź zostanie doceniona.

+0

Czy upewniasz się, że wywołujesz niszczyciela w swojej AdMob adview w onPause lub onDestroy? Wygląda na to, że robisz coś złego w onDestroy(). Czy zastąpiłeś Dirego? Jeśli tak, prześlij to proszę. – LuxuryMode

+0

Nie, po prostu wychodzę, nie robiąc nic. src można znaleźć w https://github.com/notenking/AdWhirlException/blob/master/src/me/test/admob/AdWhirlTestActivity.java – notenking

Odpowiedz

1
  1. upewnij się, że uchwyt AdWhirl w onDestory() metoda
  2. użyć połów próbować złapać NullPointer, skontaktuj się z devlopers i mamy nadzieję, że będą to naprawić (jeśli jest to bug)
+1

Ten błąd można usunąć na wiele sposobów, nie próbując złapać, ale chcę znać najlepszą metodę, aby go usunąć. A naprawdę powody do tego prowadzą. – notenking

0

Allways sprawdzić zawartość obiektu, który nosi conection do służby

if(conection !=null){ 
execute(); 
} 

ponieważ używaniem Webview zawsze sprawdzić, czy telefony Łącze jest przed wykonaniem to powinno zatrzymać NullPointer

trudno dać lepszy wgląd bez przykładzie kodu

ale można sprawdzić za pomocą menedżera łączność dół ryk jest przykładem, jak sprawdzić za wifi

public boolean isOnWifi(Context context) { 
    ConnectivityManager connManager = (ConnectivityManager) context 
      .getSystemService(CONNECTIVITY_SERVICE); 
    NetworkInfo mWifi = connManager 
      .getNetworkInfo(ConnectivityManager.TYPE_WIFI); 

    if (mWifi.isConnected()) { 
     return true; 
    } 

    return false; 
} 

aby sprawdzić, czy istnieje połączenie komórkowe wystarczy zmienić ConnectivityManager.TYPE_WIFI do ConnectivityManager.TYPE_MOBILE

+0

Co powiesz na trochę wysiłku w odpowiedzi? Napraw błędy, a zwłaszcza kod, który przynajmniej nie zawiera błędów składniowych! – WarrenFaith

0

szukać funkcji gdzie AdMob lub AdWhirl jest t rying, aby zmienić baner reklam co kilka sekund lub minut. Ten wyjątek ma miejsce, ponieważ w tej funkcji nie ma obsługi wyjątków. Po wyłączeniu wifi, niektóre kod spodziewa się poprawnie działającego połączenia internetowego, ale nie ma już połączenia. Najlepiej wypróbuj to:

  1. Przejdź do funkcji, w której baner reklamowy jest zmieniany co x sekundy/minuty.
  2. Tam trzeba otoczyć kod przez procedurę obsługi wyjątku, np. próbuj złapać. Uchwyć wyjątek NullPointerException.
Powiązane problemy