2012-03-29 4 views
0

jQuery Mobile을 사용하여 모바일 호환 페이지 버전을 만드는 CMS를 실행하는 웹 앱이 있습니다. 기본 로그인 페이지는 전화 상에 로컬로 저장됩니다.Android 웹 애플리케이션 강제 종료 버튼

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(); 
    } 
} 

}

과는 로그 캣은 말한다 : 웹보기가 아닌 경우로

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) 

내가 지난 주 정도에 대해이 문제를 해결려고 봤는데, 그것은 보인다 다시 돌아갈 역사를 지어 라.

답변

1

webViewonCreate의 로컬 변수이고 webView 클래스 멤버 변수가 할당되지 않은 상태로 있기 때문에 NullPointerException이 표시됩니다.

Off-topic : 순전히 WebView 기반 응용 프로그램에 대해 오랫동안 언급하지는 않겠지 만, 그렇게하지 말라고합시다. 그리고 어떤 이유에서든 절대적으로해야한다면 오리엔테이션 변경 사항을 처리해야합니다.

+0

저는 알고 있습니다. 저는 개인적으로 다른 접근 방식을 취하고 싶었습니다.하지만 저는 기각되었습니다. – user800360

0

당신이 BACK 버튼의 기본 동작을 재정의해야, 이것은 응용 프로그램의 주요 활동에

 @Override 
public void onBackPressed() { 

    return; 
} 

에 의해 달성된다

1

이 시도 :

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

위 코드 샘플 링크 [http://developer.android.com/resources/tutorials/views/hello-webview.html](http://developer.android.com/resources/tutorials/views/hello -webview.html) –

0

을 다시 버튼을 눌러에 전화해야합니다

finish(); 
관련 문제