首页 > 代码库 > Android:漫画APP开发笔记之从WAP网站解析图片地址并加载图片
Android:漫画APP开发笔记之从WAP网站解析图片地址并加载图片
一、使用Jsoup解析网页
<pre><code class="prettyprint"><span class="typ">Document</span><span class="pln"> doc </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Jsoup</span><span class="pun">.</span><span class="pln">connect</span><span class="pun">(</span><span class="str">url</span><span class="pun">).</span><span class="kwd">get</span><span class="pun">();</span><span class="pln"> </span></code>
二、Session保持
在项目中,通过浏览器访问网址点击“下一页”能正常翻页,而Android客户端每次GET的“下一页”地址都是第一页。原来是因为android客户端向网站发送HTTP请求时,没有在请求头部设置JSESSIONID,而使用浏览器访问服务器时,在客户端每次发起请求的时候,都会将JSESSIONID设置在Cookie头中携带过去。因此可以在第一次数据请求时就获取sessionid的值并保存在一个静态变量中,然后将其打包在后续HTTP请求的Cookie中发给服务器,服务器根据这个JSESSIONID获取对应的Session,而不是重新创建一个新Session。当然,也可以直接将第一次数据请求时获取的cookies整个打包回去:
<span style="font-size:12px;"></span><pre name="code" class="java"><span style="font-size:12px;">Connection.Response res= Jsoup.connect(url) .method(Method.GET) .execute();</span>Document doc= Jsoup.connect(url) .cookies(res.cookies()) .timeout(10000) .get();
三、标签解析
由于项目网站所需要解析的图片标签特有width=100%这种属性,因此可通过以下方式解析出图片地址并加载图片:
<span style="font-size:12px;"> Elements element = doc.select("img").select("[width=100%]"); // 具有 href 属性的链接 Log.d("element", element.toString()); for(Element links : element) { String link = links.attr("src"); try { myFileUrl = new URL(link); } catch (MalformedURLException e) { Log.i("msg", "没有数据"); } try { HttpURLConnection conn = (HttpURLConnection) myFileUrl.openConnection(); conn.setConnectTimeout(0); conn.setDoInput(true); conn.connect(); InputStream is = conn.getInputStream(); bitmap = BitmapFactory.decodeStream(is); is.close(); } catch (IOException e) { Log.i("msg", "没有数据"); } PicListInfo pi = new PicListInfo(); pi.setPicUrl(bitmap); newpiclistinfo.add(0,pi); } </span>
四、listview+adapter显示图片
<span style="font-size:12px;">if(newpiclistinfo.size() > 0){ Collections.reverse(newpiclistinfo); piclistinfo.addAll(newpiclistinfo); sla.notifyDataSetChanged(); piclist.setDividerHeight(0); if(dlg_loading.isShowing()){ dlg_loading.cancel(); } }else { Log.i("msg", "没有数据"); } </span>由于网站每页只显示4张图片,一共有8页,因此在加载完前四张后需要保持session并模拟浏览器的“翻页”:
<span style="font-size:12px;">if(count<8){ Element next=doc.getElementById("toNext"); String next_url=next.attr("href");//“下一页”的url getpic(next_url);//调用图片加载的异步线程 } else{ Log.i("msg", "加载完毕"); Toast.makeText(getApplicationContext(), "已全部加载", Toast.LENGTH_SHORT).show(); }</span>附图片加载的完整线程:
<span style="font-size:12px;"> public void getpic(String url){ new HTMLAsyncTask().execute(url); } private class HTMLAsyncTask extends AsyncTask<String, Integer, ArrayList<PicListInfo>> { Document doc = null; protected ArrayList<PicListInfo> doInBackground(String... Urls) { URL myFileUrl = null; Bitmap bitmap = null; ArrayList<PicListInfo> newpiclistinfo = new ArrayList<PicListInfo>(); try { String test=res.cookies().toString(); doc= Jsoup.connect(Urls[0]) .cookies(res.cookies()) .timeout(10000) .get(); Elements element = doc.select("img").select("[width=100%]"); // 具有 href 属性的链接 Log.d("element", element.toString()); for(Element links : element) { String link = links.attr("src"); try { myFileUrl = new URL(link); } catch (MalformedURLException e) { Log.i("msg", "没有数据"); } try { HttpURLConnection conn = (HttpURLConnection) myFileUrl.openConnection(); conn.setConnectTimeout(0); conn.setDoInput(true); conn.connect(); InputStream is = conn.getInputStream(); bitmap = BitmapFactory.decodeStream(is); is.close(); } catch (IOException e) { Log.i("msg", "没有数据"); } PicListInfo pi = new PicListInfo(); pi.setPicUrl(bitmap); newpiclistinfo.add(0,pi); } }catch (IOException e) { // TODO Auto-generated catch block Log.i("msg", "没有数据"); } return newpiclistinfo; } // 异步方法调用对返回的字符串进行处理 protected void onPostExecute(ArrayList<PicListInfo> newpiclistinfo) { try { count++; if(newpiclistinfo.size() > 0){ Collections.reverse(newpiclistinfo); piclistinfo.addAll(newpiclistinfo); sla.notifyDataSetChanged(); piclist.setDividerHeight(0); if(dlg_loading.isShowing()){ dlg_loading.cancel(); } }else { Log.i("msg", "没有数据"); } if(count<8){ Element next=doc.getElementById("toNext"); String next_url=next.attr("href"); getpic(next_url); } else{ Log.i("msg", "加载完毕"); Toast.makeText(getApplicationContext(), "已全部加载", Toast.LENGTH_SHORT).show(); } } catch (Exception e) { Toast.makeText(getApplicationContext(), "网络连接出错啦", Toast.LENGTH_SHORT).show(); } } } </span>
Android:漫画APP开发笔记之从WAP网站解析图片地址并加载图片
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。