博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Jsoup爬取网上文章动态产生TextView,ImageView
阅读量:5847 次
发布时间:2019-06-19

本文共 2857 字,大约阅读时间需要 9 分钟。

对于网上爬虫技术,爬取网上的文章,当事文章中有文章和图片,那应该怎样处理呢??直接在xml布局文件用TextView,这是可以的,但是对于文章中的图片的很难处理。所以本文介绍的是动态生成TextView和 ImageView,即在Java中抓取文章之后,遇到文字,每一段自动创建一个TextView对象,遇到图片额url自动创建一个ImageView,在布局文件中只要创建一个LinerLayout就行了,之后在Java文件中addView加入自动生成的TextView和 ImageView。

话不多说,先上图(图是一个例子):

这里写图片描述

  1. 为了缓存方便,减少流量,图片是先存取在sd卡,然后再设置到ImageView中。
    具体代码如下:
for (int i = 0; i < contents.size(); i++) {                        //把图片保存到项目的根目录                        try {                            String urlPath = contents.get(i).toString();                            URL url = new URL(urlPath);                            HttpURLConnection conn = (HttpURLConnection) url.openConnection();                            conn.setConnectTimeout(6 * 1000);  // 注意要设置超时,设置时间不要超过10秒,避免被android系统回收                             if (conn.getResponseCode() != 200) throw new RuntimeException("请求url失败");                            InputStream inSream = conn.getInputStream();                            readAsFile(inSream, new File(Environment.getExternalStorageDirectory() + "/" + i + ".jpg"));                            Log.i("我是图片",i+".jpg");                            index[i]=i;                            Log.i("indexfirst",index[i]+"");                        } catch (Exception e) {                            e.printStackTrace();                        }

在xml布局文件中,设置:

在java中动态生成:

//根据URL下载图片                        if (contents.get(i).toString()!="") {                            if(contents.get(i).toString().contains("http")){                                Log.i("woshiimgurl",contents.get(i).toString());                               // Log.i("index",index[i]+"");                                ImageView imageView=new ImageView(NewsContent.this);                                imageView.setImageBitmap(BitmapFactory.decodeFile(Environment.getExternalStorageDirectory()+"/"+index[i]+".jpg"));                                // showContent.append("\n      " + contents.get(i).toString());                                linearLayout.addView(imageView);                            }                            else {                               // 动态生成TextView,每一段文字,生成一个                                TextView textView = new TextView(NewsContent.this);                                textView.setText("      "+contents.get(i).toString());                                textView.setTextSize(20);                                linearLayout.addView(textView);                            }

注意的是:获取到的内容设置在组件中,采用异步线程,防止阻塞。

//创建异步线程启动                    Message msg=new Message();                    msg.what=0;                    handler.sendMessage(msg); //异步线程启动    //创建Handler    Handler handler=new Handler(){        public void handleMessage(android.os.Message msg) {            if(msg.what==0){            //这里设置            }            };

案例下载连接:

你可能感兴趣的文章
图像视觉的调试
查看>>
机器学习之常见机器学习算法---面试之常见机器学习算法简单思想梳理
查看>>
MongoDB数据库和集合的状态信息
查看>>
eclipse中的web-inf下没有web.xml
查看>>
2016第30周六
查看>>
Oracle升级前备份和失败回退
查看>>
联想服务器RD450 配置RAID5
查看>>
链接分析算法之:HITS算法
查看>>
[加入用户]解决useradd 用户后没有加入用户Home文件夹的情况,Linux改变文件或文件夹的訪问权限命令,linux改动用户password,usermod的ysuum安装包。飞...
查看>>
[python] 小游戏 - play_plane
查看>>
UVA 11324 The Largest Clique(强连通分量+缩点DAG的DP)
查看>>
mysql没有my.ini文件
查看>>
UGUI之控件以及按钮的监听事件系统
查看>>
linux中shell命令test用法和举例
查看>>
Dubbo中多协议
查看>>
Unity3D修改LWRP,HDRP的几项小问题及解决
查看>>
基于SOUI开发一个简单的小工具
查看>>
pgsql 并行相关配置
查看>>
编译器二次开发定制服务?
查看>>
个人网站架构设计(二)
查看>>