You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android新手求助:使用Jsoup解析HTML并通过弹窗输入URL

用Jsoup解析HTML + AlertDialog输入URL的完整实现方案

嘿,作为Android新手能想到用Jsoup来抓取网页内容,思路已经很清晰啦!我帮你把loadWebsite方法补全,还会加上Jsoup解析的核心逻辑,同时避开Android网络请求的常见坑~

第一步:先配置网络权限

首先得在AndroidManifest.xml里添加网络权限,不然App连不上网:

<uses-permission android:name="android.permission.INTERNET" />

如果你的App目标SDK是23及以上,记得还要处理动态权限申请(测试阶段也可以先在系统设置里手动给App开网络权限)。

第二步:补全loadWebsite方法 + Jsoup解析逻辑

下面是完整的代码,我把AlertDialog的点击事件补全,并且用AsyncTask来执行网络请求(Android主线程不能做网络操作,直接写会崩溃):

private void loadWebsite() {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Inserisci url sito");
    
    final EditText input = new EditText(this);
    // 设置为URI类型输入,引导用户输入正确格式的网址
    input.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_URI);
    builder.setView(input);

    // OK按钮点击事件
    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            String url = input.getText().toString().trim();
            // 简单校验URL格式,避免空输入或无效地址
            if (!url.isEmpty()) {
                // 给URL补全http/https前缀(用户可能只输入域名)
                if (!url.startsWith("http://") && !url.startsWith("https://")) {
                    url = "https://" + url;
                }
                // 启动异步任务执行网络请求和解析
                new HtmlParseTask().execute(url);
            } else {
                Toast.makeText(MainActivity.this, "请输入有效的URL", Toast.LENGTH_SHORT).show();
            }
        }
    });

    // 取消按钮逻辑
    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.cancel();
        }
    });

    builder.show();
}

// 异步任务:专门处理网络请求和Jsoup解析(必须脱离主线程)
private class HtmlParseTask extends AsyncTask<String, Void, String> {

    @Override
    protected String doInBackground(String... urls) {
        String result = "";
        try {
            // 用Jsoup连接目标URL并获取网页文档对象
            Document doc = Jsoup.connect(urls[0]).get();
            
            // 这里可以根据你的需求自定义解析逻辑,比如:
            // 获取页面标题
            String title = doc.title();
            // 获取所有段落文本
            Elements paragraphs = doc.select("p");
            
            StringBuilder sb = new StringBuilder();
            sb.append("页面标题:").append(title).append("\n\n");
            sb.append("段落内容:\n");
            for (Element p : paragraphs) {
                sb.append(p.text()).append("\n");
            }
            result = sb.toString();
            
        } catch (IOException e) {
            // 捕获网络异常或解析异常,避免App崩溃
            result = "解析失败:" + e.getMessage();
            e.printStackTrace();
        }
        return result;
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
        // 解析完成后,用弹窗展示结果
        AlertDialog.Builder resultBuilder = new AlertDialog.Builder(MainActivity.this);
        resultBuilder.setTitle("解析结果")
                .setMessage(s)
                .setPositiveButton("确定", null)
                .show();
    }
}

几个关键注意点:

  • 主线程不能做网络操作:所以必须用AsyncTask(或者现在更推荐的Coroutine协程,不过AsyncTask对新手更友好)
  • URL格式校验:自动补全http/https前缀,避免用户输入google.com这类不完整地址导致连接失败
  • 异常处理:网络请求容易出错(没网、URL无效等),一定要捕获IOException
  • Jsoup基础用法:Jsoup.connect(url).get()获取网页文档,select()方法通过CSS选择器定位元素(比如doc.select("p")就是获取所有段落标签)

最后添加Jsoup依赖

在app/build.gradle的dependencies里加上Jsoup的依赖:

implementation 'org.jsoup:jsoup:1.17.2' // 可以用最新版本

这样你就能通过AlertDialog输入URL,然后用Jsoup解析页面内容啦!

内容的提问来源于stack exchange,提问作者Daniele Asta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:49:03