Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android AsyncTask在WebView中加载本地文件_Android_Android Studio_Android Asynctask_Android Webview - Fatal编程技术网

Android AsyncTask在WebView中加载本地文件

Android AsyncTask在WebView中加载本地文件,android,android-studio,android-asynctask,android-webview,Android,Android Studio,Android Asynctask,Android Webview,在主持人将此问题标记为重复问题之前,我已经阅读了堆栈中的所有相关问题,没有任何关于此问题的报告 我在尝试将AsyncTask与WebView一起使用时遇到问题,请按照代码进行操作 final WebView webNISR=(WebView)findViewById(R.id.web\u NISR); 最终WebSettings webS_NISR=webNISR.getSettings(); AsyncTask任务=新建AsyncTask(){ @凌驾 受保护的void onPreExecu

在主持人将此问题标记为重复问题之前,我已经阅读了堆栈中的所有相关问题,没有任何关于此问题的报告

我在尝试将AsyncTask与WebView一起使用时遇到问题,请按照代码进行操作

final WebView webNISR=(WebView)findViewById(R.id.web\u NISR);
最终WebSettings webS_NISR=webNISR.getSettings();
AsyncTask任务=新建AsyncTask(){
@凌驾
受保护的void onPreExecute(){
webNISR.setVisibility(View.GONE);
//我把webNISR.loadUrl留在这里进行测试,但它的处理速度一直很慢,没有任何变化!
loadUrl(getString(R.string.waytofile)+“file.html”);
}
@凌驾
受保护的Void doInBackground(Void…参数){
webS_NISR.setJavaScriptEnabled(true);
webS\u NISR.setDomStorageEnabled(true);
//webNISR.loadUrl(参数);
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
webNISR.setVisibility(View.VISIBLE);
}
};
doInBackground()
中,只需进行处理,好吗

但是我不能在内部使用
webNISR.loadUrl()
,我总是会得到错误“方法loadUrl必须从UI或UI线程调用,当前推断的线程是worker”,但是如果我使用异步任务在另一个线程上完成此过程,并且不加载UIThread(这会使应用程序变慢)

我知道任何改变视图的内容都必须是
onPostExecute()
onPreExecute()
,但不是
webNISR.loadUrl()
减慢了活动的加载速度吗

我需要“包含”WebView呈现,这样我就可以获得性能增益或只是设法加载页面

值得一提的是,每个活动大约有7个WebView,因此需要加载页面

注意:网络视图是不可替代的(只有它们才能加载这些本地文件)

我再也不知道该怎么办了,这场战斗已经持续了好几天:/

欢迎提出任何问题

谢谢大家!

webView.loadUrl()是异步的:它立即返回,webView在自己的线程中继续工作。因此,您不需要
异步任务
。我怀疑保持
AsyncTask
是否会增加任何显著的性能增益

您可以使用
setWebViewClient
WebViewClient
设置为
WebView
并覆盖
onPageFinished
方法。 当webview在
onPageFinished
回调中完成加载时,执行您需要执行的操作

final WebView webNISR = (WebView) findViewById(R.id.web_NISR);
webNISR.setVisibility(View.GONE);

webNISR.getSettings().setJavaScriptEnabled(true);
webNISR.getSettings().setDomStorageEnabled(true);
webNISR.loadUrl(getString(R.string.waytofile)+"file.html");

webview.setWebViewClient(new WebViewClient() {
    public void onPageFinished(WebView view, String url) {
        webNISR.setVisibility(View.VISIBLE);
    }
});

我已经尝试过这种方法,无论是否使用相同的方法,页面都会保持不稳定。同样,我尝试创建一个控制器,使所有人在加载时都可见,但由于某些原因,无法访问
onPageFinished()
方法中包含的变量的值。如果你愿意,我会编辑这个问题并添加我已经用这个方法尝试过的内容。
final WebView webNISR = (WebView) findViewById(R.id.web_NISR);
webNISR.setVisibility(View.GONE);

webNISR.getSettings().setJavaScriptEnabled(true);
webNISR.getSettings().setDomStorageEnabled(true);
webNISR.loadUrl(getString(R.string.waytofile)+"file.html");

webview.setWebViewClient(new WebViewClient() {
    public void onPageFinished(WebView view, String url) {
        webNISR.setVisibility(View.VISIBLE);
    }
});