class MyWebClient extends WebViewClient {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
// TODO Auto-generated method stub
super.onPageStarted(view, url, favicon);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
return false;
}
}
PreviewCallback previewCb = new PreviewCallback() {
public void onPreviewFrame(byte[] data, Camera camera) {
Camera.Parameters parameters = camera.getParameters();
Size size = parameters.getPreviewSize();
Image barcode = new Image(size.width, size.height, "Y800");
barcode.setData(data);
int result = scanner.scanImage(barcode);
if (result != 0) {
previewing = false;
mCamera.setPreviewCallback(null);
mCamera.stopPreview();
SymbolSet syms = scanner.getResults();
for (Symbol sym : syms) {
String value = new String(sym.getData());
if(value.startsWith("http://192.168.1.6")){
scanText.setText("QR Code result: " + value);
barcodeScanned = true;
WebView webView = (WebView) findViewById(R.id.web_engine);
webView.setWebViewClient(new MyWebClient());
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl(value);
}
else{
scanText.setText("QR Code result 2: " + value);
barcodeScanned = true;
}
TextView tv = (TextView) findViewById(R.id.scanText);
tv.setMovementMethod(LinkMovementMethod.getInstance());
}
}
}
};
这是logcat:
03-25 20:05:22.714: E/AndroidRuntime(14267): FATAL EXCEPTION: main
03-25 20:05:22.714: E/AndroidRuntime(14267): java.lang.NullPointerException
03-25 20:05:22.714: E/AndroidRuntime(14267): at net.sourceforge.zbar.android.CameraTest.CameraTestActivity$2.onPreviewFrame(CameraTestActivity.java:201)
03-25 20:05:22.714: E/AndroidRuntime(14267): at android.hardware.Camera$EventHandler.handleMessage(Camera.java:864)
03-25 20:05:22.714: E/AndroidRuntime(14267): at android.os.Handler.dispatchMessage(Handler.java:99)
03-25 20:05:22.714: E/AndroidRuntime(14267): at android.os.Looper.loop(Looper.java:176)
03-25 20:05:22.714: E/AndroidRuntime(14267): at android.app.ActivityThread.main(ActivityThread.java:5317)
03-25 20:05:22.714: E/AndroidRuntime(14267): at java.lang.reflect.Method.invokeNative(Native Method)
03-25 20:05:22.714: E/AndroidRuntime(14267): at java.lang.reflect.Method.invoke(Method.java:511)
03-25 20:05:22.714: E/AndroidRuntime(14267): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
03-25 20:05:22.714: E/AndroidRuntime(14267): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
03-25 20:05:22.714: E/AndroidRuntime(14267): at dalvik.system.NativeStart.main(Native Method)
我有一个二维码扫描器应用程序。扫描的qr代码以http://192.168.1.6
开头时,我的应用停止。我想在webview中显示此链接,而不是在浏览器中显示。但如果网址不是以http://192.168.1.6
开头,则会在另一个浏览器中打开该链接。
答案 0 :(得分:0)
您需要正确实施WebViewClient.shouldOverrideUrlLoading
功能。
首先,请不要从中拨打loadUrl
。 URL加载已在进行中,再次调用它是不正确的。
其次,您可以检查正在加载的网址(它作为参数传递给shouldOverrideUrlLoading
的{{1}},然后更改逻辑以执行正确的操作,具体取决于是否& #39; s是否存在。听起来好像只是在那里你只想http://192.168.1.6
来处理WebView中的负载。否则,你应该创建并发送一个ACTION_VIEW Intent来加载URL设备的浏览器并返回true。
请参阅http://developer.android.com/reference/android/webkit/WebViewClient.html#shouldOverrideUrlLoading(android.webkit.WebView,java.lang.String)和http://developer.android.com/reference/android/content/Intent.html
答案 1 :(得分:0)
根据您的堆栈跟踪,您在CameraTestActivity的201行上有一个NullPointerException
:
java.lang.NullPointerException at net.sourceforge.zbar.android.CameraTest.CameraTestActivity$2.onPreviewFrame(CameraTestActivity.java:201)
如果您想发布包含此行的代码,我可以帮助您追踪它。