2012-03-29 85 views
0

我有一个网络应用程序,我正在使用jQuery Mobile来制作移动兼容页面版本的CMS。基本登录页面本地存储在手机上。Android WebApp部队关闭后退按钮

public class WebAppActivity extends Activity { 
WebView webView; 

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

    // Point to the content view defined in XML 

    setContentView(R.layout.main); 

    // Configure the webview setup in the xml layout 

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

    WebSettings webSettings = webView.getSettings(); 

    // Yes, we want javascript, pls. 

    webSettings.setJavaScriptEnabled(true); 


    webView.loadUrl("file:///android_asset/www/webapp.html"); 



webView.setWebViewClient(new WebViewClient() { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url){ 
     view.loadUrl(url); 
     return true; 
    } 
}); 


} 



@Override 
public void onBackPressed() 
{ 
    if(webView.canGoBack()) 
    { 
     webView.goBack(); 
    }else{ 
     super.onBackPressed(); 
    } 
} 

}

和的logcat的说:

03-29 15:31:47.354: E/AndroidRuntime(430): FATAL EXCEPTION: main 
03-29 15:31:47.354: E/AndroidRuntime(430): java.lang.NullPointerException 
03-29 15:31:47.354: E/AndroidRuntime(430): at com.package.mobile.android.webapp.onBackPressed(WebApp.java:223) 
03-29 15:31:47.354: E/AndroidRuntime(430): at android.app.Activity.onKeyUp(Activity.java:1898) 
03-29 15:31:47.354: E/AndroidRuntime(430): at android.view.KeyEvent.dispatch(KeyEvent.java:1280) 
03-29 15:31:47.354: E/AndroidRuntime(430): at android.app.Activity.dispatchKeyEvent(Activity.java:2078) 
03-29 15:31:47.354: E/AndroidRuntime(430): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1663) 
03-29 15:31:47.354: E/AndroidRuntime(430): at android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2560) 
03-29 15:31:47.354: E/AndroidRuntime(430): at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2535) 
03-29 15:31:47.354: E/AndroidRuntime(430): at android.view.ViewRoot.handleMessage(ViewRoot.java:1867) 
03-29 15:31:47.354: E/AndroidRuntime(430): at android.os.Handler.dispatchMessage(Handler.java:99) 
03-29 15:31:47.354: E/AndroidRuntime(430): at android.os.Looper.loop(Looper.java:123) 
03-29 15:31:47.354: E/AndroidRuntime(430): at android.app.ActivityThread.main(ActivityThread.java:3683) 
03-29 15:31:47.354: E/AndroidRuntime(430): at java.lang.reflect.Method.invokeNative(Native Method) 
03-29 15:31:47.354: E/AndroidRuntime(430): at java.lang.reflect.Method.invoke(Method.java:507) 
03-29 15:31:47.354: E/AndroidRuntime(430): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
03-29 15:31:47.354: E/AndroidRuntime(430): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
03-29 15:31:47.354: E/AndroidRuntime(430): at dalvik.system.NativeStart.main(Native Method) 

我一直在试图解决这个问题,在过去一周左右,似乎如果网页流量不作为建立一个历史回溯。在返回按钮的按下

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

回答

1

NullPointerException是因为您的webViewonCreate中的局部变量,并且webView类成员变量未分配。

题外话:我不会谈论纯基于WebView的应用程序的长篇大论,但我们只是说你不应该这样做。如果你绝对必须出于某种原因或其他原因,那么你应该确保处理方位变化。

+0

我知道,我个人想采取不同的方法,但我被否决了。 – user800360 2012-03-29 17:05:14

0

你需要重写后退按钮默认行为,这是由

 @Override 
public void onBackPressed() { 

    return; 
} 

在应用程序中的主要活动取得

1

试试这个您应该致电

finish(); 
+0

上面的代码示例链接[http://developer.android.com/resources/tutorials/views/hello-webview.html](http://developer.android.com/resources/tutorials/views/hello -webview.html) – 2012-03-29 16:12:18

0