2013-06-27 1 views
0

Je travaillais sur une application web simple. Il y a quelques jours, ça marchait très bien avec le bouton de retour. Mais j'ai ajouté admob récemment et tout fonctionne sauf pour le bouton de retour à la fois dans l'émulateur et l'appareil. Il dit inopinément arrêté.Application Android force de fermeture sur la touche retour pressée

J'ai recherché sur google google, j'ai trouvé une question avec le même titre mais la réponse n'était pas correcte. Donc, ce n'est pas une question en double.

Voici mainActivity.java

public class MainActivity extends Activity { 
    private WebView WebView; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     getWindow().requestFeature(Window.FEATURE_NO_TITLE); 

     setContentView(R.layout.main); 
     WebView WebView = (WebView) findViewById(R.id.webView); 
     WebView.loadUrl("file:///android_asset/index.html"); 
     WebView.getSettings().setJavaScriptEnabled(true); 
     WebView.setWebViewClient(new WebViewClient() { 
      @Override 
      public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       view.loadUrl(url); 
       return true; 
      } 
     }); 
    } 

    // For Options Menu 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.main, menu); 
     return true; 
    } 

    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.about: 
       startActivity(new Intent(this, About.class)); 
       return true; 
      case R.id.exit: 
       finish(); 
       return true; 
      default: 
       return super.onOptionsItemSelected(item); 
     } 
    } 

    @Override 
    public boolean onKeyDown(final int keyCode, final KeyEvent event) { 
     if ((keyCode == KeyEvent.KEYCODE_BACK) && WebView.canGoBack()) { 
      WebView.goBack(); 
      return true; 
     } 
     return super.onKeyDown(keyCode, event); 
    } 
} 

Tout d'abord je ne suis pas en mesure de mettre des annonces dans mon WebView si ce code XML n'est pas le même que précédemment (lorsque la clé arrière fonctionnait). J'ai copié collé à partir de différentes sources pour résoudre ce problème, mais maintenant les annonces et WebView fonctionnent parfaitement, sauf pour la clé de retour.

Voici main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <WebView 
     android:id="@+id/webView" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1.02" /> 

    <com.google.ads.AdView 
     android:id="@+id/adView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     ads:adSize="BANNER" 
     ads:adUnitId="my ad id" 
     ads:loadAdOnCreate="true" > 
    </com.google.ads.AdView> 

</LinearLayout> 

Et journal de logcat

06-27 23:10:40.000: V/WebRequest(10155): WebRequest::WebRequest, setPriority = 1 
06-27 23:10:40.030: V/chromium(10155): external/chromium/net/disk_cache/hostres_plugin_bridge.cc:52: [0627/231040:INFO:hostres_plugin_bridge.cc(52)] StatHubCreateHostResPlugin initializing... 
06-27 23:10:40.030: V/chromium(10155): external/chromium/net/disk_cache/hostres_plugin_bridge.cc:57: [0627/231040:INFO:hostres_plugin_bridge.cc(57)] StatHubCreateHostResPlugin lib loaded 
06-27 23:10:40.040: V/chromium(10155): external/chromium/net/disk_cache/hostres_plugin_bridge.cc:63: [0627/231040:INFO:hostres_plugin_bridge.cc(63)] StatHubCreateHostResPlugin plugin connected 
06-27 23:10:40.040: V/chromium(10155): external/chromium/net/http/http_cache.cc:1167: [0627/231040:INFO:http_cache.cc(1167)] HttpCache::OnBackendCreated HostStat created 
06-27 23:10:40.040: E/chromium(10155): external/chromium/net/disk_cache/stat_hub.cc:213: [0627/231040:ERROR:stat_hub.cc(213)] StatHub::Init - App com.example.mywebapp isn't supported. 
06-27 23:10:40.050: E/chromium(10155): external/chromium/net/disk_cache/stat_hub.cc:213: [0627/231040:ERROR:stat_hub.cc(213)] StatHub::Init - App com.example.mywebapp isn't supported. 
06-27 23:10:40.050: W/chromium(10155): external/chromium/net/disk_cache/backend_impl.cc:1829: [0627/231040:WARNING:backend_impl.cc(1829)] Destroying invalid entry. 
06-27 23:10:41.590: I/QC_RIL_OEM_HOOK(10155): QcRilOemHook Service Created Successfully 
06-27 23:10:41.590: V/QC_RIL_OEM_HOOK(10155): sendQcRilOemHookMsg: Outgoing Data is 5155414c434f4d4d0300080006000000726d6e657430 
06-27 23:10:45.660: W/dalvikvm(10155): threadid=1: thread exiting with uncaught exception (group=0x40aa2390) 
06-27 23:10:45.660: E/AndroidRuntime(10155): FATAL EXCEPTION: main 
06-27 23:10:45.660: E/AndroidRuntime(10155): java.lang.NullPointerException 
06-27 23:10:45.660: E/AndroidRuntime(10155): at com.example.mywebapp.MainActivity.onKeyDown(MainActivity.java:57) 
06-27 23:10:45.660: E/AndroidRuntime(10155): at android.view.KeyEvent.dispatch(KeyEvent.java:2551) 
06-27 23:10:45.660: E/AndroidRuntime(10155): at android.app.Activity.dispatchKeyEvent(Activity.java:2329) 
06-27 23:10:45.660: E/AndroidRuntime(10155): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1806) 
06-27 23:10:45.660: E/AndroidRuntime(10155): at android.view.ViewRootImpl.deliverKeyEventPostIme(ViewRootImpl.java:3342) 
06-27 23:10:45.660: E/AndroidRuntime(10155): at android.view.ViewRootImpl.handleFinishedEvent(ViewRootImpl.java:3315) 
06-27 23:10:45.660: E/AndroidRuntime(10155): at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2460) 
06-27 23:10:45.660: E/AndroidRuntime(10155): at android.os.Handler.dispatchMessage(Handler.java:99) 
06-27 23:10:45.660: E/AndroidRuntime(10155): at android.os.Looper.loop(Looper.java:137) 
06-27 23:10:45.660: E/AndroidRuntime(10155): at android.app.ActivityThread.main(ActivityThread.java:4456) 
06-27 23:10:45.660: E/AndroidRuntime(10155): at java.lang.reflect.Method.invokeNative(Native Method) 
06-27 23:10:45.660: E/AndroidRuntime(10155): at java.lang.reflect.Method.invoke(Method.java:511) 
06-27 23:10:45.660: E/AndroidRuntime(10155): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787) 
06-27 23:10:45.660: E/AndroidRuntime(10155): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554) 
06-27 23:10:45.660: E/AndroidRuntime(10155): at dalvik.system.NativeStart.main(Native Method) 

Répondre

2

WebView est nulle, parce que dans votre fonction onCreate vous créez une variable locale nommée WebView, de sorte que votre mission ne affecter à la variable d'instance. Changer

WebView WebView = (WebView) findViewById(R.id.webView); 

à

WebView = (WebView) findViewById(R.id.webView); 
+0

wow ... thx @Gabe .. ça marche ... :) – shahriar31

Questions connexes