android应用程序在webview url更改时崩溃
Posted
技术标签:
【中文标题】android应用程序在webview url更改时崩溃【英文标题】:android app crashing on webview url change 【发布时间】:2013-11-05 05:12:25 【问题描述】:与question 类似,但解决方案在 mycase 中不起作用。
运行函数 webview.loadUrl 时 android 应用程序崩溃 关闭时出现以下错误:
E/AndroidRuntime(1593):由以下原因引起: java.lang.Throwable:警告:在线程上调用了 WebView 方法 'WebViewCoreThread'。必须在 UI 上调用所有 WebView 方法 线。未来版本的 WebView 可能不支持在其他版本上使用 线程。
编辑:现在尝试在 runOnUiThread(new Runnable() ) 中运行该函数,但出现错误并且无法在上下文中输入 runOnUiThread 的位置。 这是完整的代码:
public class MyjavascriptInterface
@JavascriptInterface
public void androidFieldPrompt(String title, String msg, final String funct)
final EditText input = new EditText(MainActivity.this);
AlertDialog.Builder alert = new AlertDialog.Builder(MainActivity.this);
alert.setTitle(title);
alert.setMessage(msg);
alert.setView(input);
alert.setPositiveButton("OK", new DialogInterface.OnClickListener()
public void onClick(DialogInterface dialog, int whichButton)
String value = input.getText().toString();
// ERROR IS BEING THROWN HERE
webView.loadUrl("javascript:window."+funct+"('"+value+"')");
return;
);
alert.show();
【问题讨论】:
WebView Methods is not called in android的可能重复 【参考方案1】:E/AndroidRuntime(1593):引起:java.lang.Throwable:警告:A 在线程“WebViewCoreThread”上调用了 WebView 方法。所有 Web 视图 方法必须在 UI 线程上调用。 WebView 的未来版本 可能不支持在其他线程上使用。
正如错误指出的那样......您正在非 UI 线程(在点击侦听器内)上调用 webview 方法。
你应该使用runOnUiThread在onClick内部调用web视图方法时使用主线程
MainActivity.this.runOnUiThread(new Runnable()
@Override
public void run()
String value = input.getText().toString();
webView.loadUrl("javascript:window."+funct+"('"+value+"')");
return;
);
【讨论】:
【参考方案2】:或者,您可以使用 Runnable 以便在 UI 线程上使用 WebView 并消除问题:
webView.post(new Runnable()
@Override
public void run()
String value = input.getText().toString();
webView.loadUrl("javascript:window."+funct+"('"+value+"')");
);
【讨论】:
这样更简洁,因为您不需要引用活动以上是关于android应用程序在webview url更改时崩溃的主要内容,如果未能解决你的问题,请参考以下文章
如果第一个 URL 不存在于 android webView 中,则加载第二个 URL