2011-05-25 42 views
1

我是一个初学者在Android开发,所以如果这是显而易见的原谅。我使用来自android.com的示例创建了一个简单的web应用程序,但是当单击tel:或mailto:等链接时,应用程序崩溃并且让我强制退出。我想知道是否有人能告诉我为什么。Android:简单的网络应用程序崩溃的链接,然后http计划

public class MyApplication extends Activity { 

    WebView mWebView; 

    private class InternalWebViewClient extends WebViewClient { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 

      // This is my web site, so do not override; let my WebView load the page 
      if (Uri.parse(url).getHost().equals("m.mydomain.nl")) { 
       return false; 
      } else { 
       // Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs 
       Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
       startActivity(intent); 
       return true; 
      } 

     } 
    } 

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

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     /* Use the WebView class to display website */ 
     mWebView = (WebView) findViewById(R.id.webview); 
     mWebView.setWebViewClient(new InternalWebViewClient()); 
     mWebView.getSettings().setJavaScriptEnabled(true); 
     mWebView.loadUrl("http://m.mydomain.nl/"); 
    } 

} 

回答

3

对不起,这个实际上固定它。使用mailto时,没有主机,因此getHost()将返回null并导致异常。

private class InternalWebViewClient extends WebViewClient { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 

     // This is my web site, so do not override; let my WebView load the page 
     if (Uri.parse(url).getHost() != null && Uri.parse(url).getHost().equals("m.domain.nl")) { 
      return false; 
     } else { 
      // Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs 
      Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
      startActivity(intent); 
      return true; 
     } 

    } 
} 
1

Logcat中的错误是什么? (您可以通过在Eclipse中打开DDMS视图来检查logcat,然后选择正在运行应用程序的设备.Logcat应该以调试视角显示,或者可以将其添加到主Java视图中。)