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
相关产品推荐
相关产品推荐

