简单实现Android读取网络图片到本地
程序员文章站
2024-03-06 23:10:08
今天在网上看到了一个关于读取网络文件的小视频,觉得不错,拿来与大家分享
思路
具体的思路比较的简单,但是思想非常的单纯。那就是输入一个网址,点击按钮,将从网络上获取的一...
今天在网上看到了一个关于读取网络文件的小视频,觉得不错,拿来与大家分享
思路
具体的思路比较的简单,但是思想非常的单纯。那就是输入一个网址,点击按钮,将从网络上获取的一张图片显示到一个imageview控件上。
这样看来,我们需要用到的核心就是网络操作了。说白了,就是读取网络流文件了。
代码展示
首先是主界面的布局文件
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <edittext android:id="@+id/et_website" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="please type the url " /> <button android:id="@+id/btn_get" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="check" /> <imageview android:id="@+id/iv_picture" android:layout_width="match_parent" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" /> </linearlayout>
然后是主界面的逻辑代码
package com.example.getphotobyxml; import android.app.activity; import android.graphics.bitmap; import android.graphics.bitmapfactory; import android.os.bundle; import android.view.view; import android.view.view.onclicklistener; import android.widget.button; import android.widget.edittext; import android.widget.imageview; import android.widget.toast; import com.example.service.imageservice; public class mainactivity extends activity { private edittext met_url; private imageview miv_picture; private button mbtn_get; /** * 初始化相关的需要使用到的id */ public void init() { met_url = (edittext) findviewbyid(r.id.et_website); miv_picture = (imageview) findviewbyid(r.id.iv_picture); mbtn_get = (button) findviewbyid(r.id.btn_get); } @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); //记得要调用哦 init(); mbtn_get.setonclicklistener(new onclicklistener() { @override public void onclick(view v) { string website = met_url.gettext().tostring(); if (website == null || website.equals("")) { toast.maketext(mainactivity.this, "请输入正确的网址哦!", toast.length_long).show(); return; } byte[] bytes; try { bytes = imageservice.getimage(website); bitmap bitmap = bitmapfactory.decodebytearray(bytes, 0, bytes.length); miv_picture.setimagebitmap(bitmap); } catch (exception e) { // todo auto-generated catch block e.printstacktrace(); } } }); } /** * 从网络以xml的方式获得一张图片,并显示到一个imageview上 * 按钮事件可以直接不注册onclicklistener,而使用这个方法 * @param view */ public void getpicture(view view) { string website = met_url.gettext().tostring(); if (website == null || website.equals("")) { toast.maketext(this, "请输入正确的网址哦!", toast.length_long).show(); return; } byte[] bytes; try { bytes = imageservice.getimage(website); bitmap bitmap = bitmapfactory.decodebytearray(bytes, 0, bytes.length); miv_picture.setimagebitmap(bitmap); } catch (exception e) { // todo auto-generated catch block e.printstacktrace(); } } }
service 以及 tools助手
package com.example.service; import java.io.inputstream; import java.net.httpurlconnection; import java.net.url; import com.example.utils.streamtool; /** *图片服务的业务类 */ public class imageservice { public static byte[] getimage(string website) throws exception { url url = new url(website); httpurlconnection conn = (httpurlconnection) url.openconnection(); conn.setconnecttimeout(5000); conn.setrequestmethod("get"); if(conn.getresponsecode()==200){ inputstream inputstream = conn.getinputstream(); byte[] bytes = streamtool.read(inputstream); return bytes; } return "读取网络数据失败".getbytes(); } }
package com.example.utils; import java.io.bytearrayoutputstream; import java.io.inputstream; /** *专门用于将输入流转换成一个字节数组的utils类 */ public class streamtool { public static byte[] read(inputstream inputstream) throws exception { bytearrayoutputstream baos = new bytearrayoutputstream(); byte[] buf = new byte[1024]; int len = 0; while((len = inputstream.read(buf))!=-1){ baos.write(buf, 0 ,len); } baos.close(); return buf; } }
总结
这里面的代码是非常的简单的,我这里贴出代码的主要的目的是为了展示分层的思想,以及重构的艺术。
在代码中我们看到了,创建了专门的类来完成专门的工作。而且不同的层次的类,处理的业务也是不一样的。这样有助于我们以面向对象的方式编程,带来更加清晰的逻辑。