首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >安卓WebView J汤

安卓WebView J汤
EN

Stack Overflow用户
提问于 2016-10-28 01:54:50
回答 1查看 3K关注 0票数 1

我正在做一个应用程序,我想在其中显示我的网站,但与较少的div元素。

在这个示例代码中,我使用了stackoverflow.com的网站,并试图隐藏div类菜单(主网站顶部的按钮)。

运行代码后,我将得到一个空白/白色的webview。我尝试的是使字符串html成为最终,然后调用它来设置webview的最终url。

代码:

代码语言:javascript
运行
复制
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import java.io.File;

public class MyCustomAsyncTask extends AsyncTask<File, Void, String> {
@Override
protected String doInBackground(File... params) {

    Document doc = Jsoup.connect("http://stackoverflow.com/").get();
    Elements ele = doc.select(":not(#hmenus)");        // ->>>>> Jsoup html
    final String html = ele.toString();

}}

public class MainActivity extends Activity {


    private WebView WebView;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        WebView = (WebView) findViewById(webView);
        WebView.setWebChromeClient(new WebChromeClient());
        WebView.getSettings().setJavaScriptEnabled(true);
        WebView.getSettings().setDomStorageEnabled(true);

        final String mime = "text/html";
        final String encoding = "utf-8";
        WebView.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageFinished(WebView view, String url) {

                // ->>>>>>   Change the website --->>> insert call html value
                WebView.loadData(html, mime, encoding);
            }
        });
    }
}

如何调用html final String html = ele.toString();的值并将其转换为WebView.loadData(html, mime, encoding);

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-28 06:33:35

您没有正确地使用AsyncTask。你应该读

声明AsyncTask并实现用于获取网页的doInBackground和用于在其准备就绪时显示结果的onPostExecute

代码语言:javascript
运行
复制
private class GetData extends AsyncTask<Void, Void, String> {

// This is run in a background thread
    @Override
    protected String doInBackground(Void... params) {
        try {
            Document doc = Jsoup.connect("https://stackoverflow.com/")
                    .userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0")
                    .get();
            Elements ele = doc.select("#hmenus");
            html = ele.toString();
            return html;
        } catch (Exception e) {
            Log.d("APP", e.toString());
        }            
        return "error";
    }

    // This runs in UI when background thread finishes
    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        Log.d("APP", "1");
        WebView.loadData(result, mime, encoding);            
    }
}

至于MainActivity,它必须调用AsyuncTask

代码语言:javascript
运行
复制
public class MainActivity extends Activity {

    private WebView WebView;
    String html = "Loading...";
    final String mime = "text/html";
    final String encoding = "utf-8";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        WebView = (WebView) findViewById(R.id.webview);
        WebView.setWebChromeClient(new WebChromeClient());
        WebView.getSettings().setJavaScriptEnabled(true);
        WebView.getSettings().setDomStorageEnabled(true);
        //Display "Loading..." message while waiting
        WebView.loadData(html, mime, encoding);
        //Invoke the AsyncTask
        new GetData().execute();
    }
}

别忘了你的舱单上的internet-permission

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40296814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档