安卓:handler下载网络图片(附带有进度条和网络连接判断的APP)
2015-09-22 21:35
921 查看
点击下载按钮后的结果:
注意: 加网络权限
逻辑代码文件:
布局文件:
项目2:
带有进度条和网络连接状态判断的handler下载图片APP:
加权限:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
请求网络工具类:
逻辑代码文件:
布局文件:
注意: 加网络权限
逻辑代码文件:
<span style="font-size:18px;">package com.example.day18_handlertest; import java.io.ByteArrayOutputStream; import java.io.InputStream; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.view.Menu; import android.view.View; import android.widget.ImageView; public class MainActivity extends Activity { ImageView iv; //Button bt; Bitmap bm ; String path="http://www.guaiwei.com/uploads/allimg/150326/28-150326141503.png"; Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); Bitmap x = (Bitmap) msg.obj; iv.setImageBitmap(bm); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); iv=(ImageView) findViewById(R.id.iv); } public void click(View v) { new Thread(){ public void run() { //创建请求客户端 HttpClient hclient=new DefaultHttpClient(); //请求 HttpGet request=new HttpGet(path); //字节输出流存放要下载的文件 ByteArrayOutputStream bo=new ByteArrayOutputStream(); try { //得到客户端执行请求的结果 HttpResponse response=hclient.execute(request); //请求成功执行的操作 if(response.getStatusLine().getStatusCode()==200) { //得到请求的实体内容 InputStream in = response.getEntity().getContent(); byte b[]=new byte[1024]; int count=0; while((count=in.read(b))!=-1) { bo.write(b,0,count); bo.flush(); } } bm= BitmapFactory.decodeByteArray(bo.toByteArray(), 0, bo.toByteArray().length); } catch (Exception e) { e.printStackTrace(); } Message msg=handler.obtainMessage(); msg.obj=bm; handler.sendMessage(msg); } }.start(); } } </span>
布局文件:
<span style="font-size:18px;"><RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <ImageView android:id="@+id/iv" android:layout_width="match_parent" android:layout_height="wrap_content" /> <Button android:id="@+id/bt" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="下载图片" android:layout_below="@+id/iv" android:gravity="center" android:onClick="click"/> </RelativeLayout> </span>
项目2:
带有进度条和网络连接状态判断的handler下载图片APP:
加权限:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
请求网络工具类:
<span style="font-size:18px;">package com.utils; import java.io.ByteArrayOutputStream; import java.io.InputStream; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; public class HttpUtil { //判断是否有网络 public static boolean isConn(Context context) { //得到网络的管理者 ConnectivityManager manager=(ConnectivityManager) context.getSystemService(context.CONNECTIVITY_SERVICE); NetworkInfo info=manager.getActiveNetworkInfo(); if(info!=null) { return true; } else { return false; } } public static byte[] getData(String path) { //创建请求客户端 HttpClient client=new DefaultHttpClient(); //创建请求对象 HttpGet hg=new HttpGet(path); ByteArrayOutputStream bo=new ByteArrayOutputStream(); try { //客户端执行请求 HttpResponse hr=client.execute(hg); if(hr.getStatusLine().getStatusCode()==200) { InputStream in = hr.getEntity().getContent(); byte b[]=new byte[1024]; int count=0; while((count=in.read(b))!=-1) { bo.write(b, 0, count); bo.flush(); } } return bo.toByteArray(); } catch (Exception e) { e.printStackTrace(); } return null; } } </span>
逻辑代码文件:
<span style="font-size:18px;">package com.example.day18_handleimg; import android.app.Activity; import android.app.ProgressDialog; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.widget.ImageView; import android.widget.Toast; import com.utils.HttpUtil; public class MainActivity extends Activity { ImageView iv; static final int ok=1; static final int error=ok+1; ProgressDialog pdialog; String path="http://www.guaiwei.com/uploads/allimg/150326/28-150326141503.png"; Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch(msg.what) { case ok: Bitmap c=(Bitmap) msg.obj; iv.setImageBitmap(c); break; case error: String str=(String) msg.obj; Toast.makeText(MainActivity.this, str, 0).show(); break; } pdialog.dismiss(); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); iv=(ImageView) findViewById(R.id.iv); pdialog=new ProgressDialog(MainActivity.this); pdialog.setMessage("正在下载"); } public void click(View v) { pdialog.show(); new Thread(){ public void run() { if(HttpUtil.isConn(MainActivity.this)) {//有网络 byte b[]=HttpUtil.getData(path); Bitmap bm=BitmapFactory.decodeByteArray(b, 0, b.length); Message msg=handler.obtainMessage(); msg.obj=bm; msg.what=ok; handler.sendMessage(msg); } else { //无网络 Message msg=handler.obtainMessage(); msg.obj="网络异常,请检查网络"; msg.what=error; handler.sendMessage(msg); } }; }.start(); } } </span>
布局文件:
<span style="font-size:18px;"><RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <ImageView android:id="@+id/iv" android:layout_width="match_parent" android:layout_height="200dp" /> <Button android:id="@+id/bt" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="下载图片" android:onClick="click" android:layout_below="@+id/iv"/> </RelativeLayout> </span>
相关文章推荐
- HDU3549 Flow Problem (网络流入门题)
- poj Asteroids (二分匹配之匈牙利算法)
- C++ 用libcurl库进行http通讯网络编程
- Cloudstack 4.5基础网络架构部署——cloudstack management server(01)
- eclipse:报错信息The superclass “javax.servlet.http.HttpServlet” was not found on the Java Build Path
- 那些不能遗忘的知识点回顾——计算机网络系列(笔试面试高频题)
- hdu5452 || 沈阳网络赛1003题 最近公共祖先问题
- c#网络编程学习笔记01_委托
- 【计算机网络】http状态码
- 关于网络字节序和主机字节序
- hihoCoder 1231 Border Length(ACM-ICPC国际大学生程序设计竞赛北京赛区(2015)网络赛 E)
- http协议
- 【计算机网络】http中get和post的区别
- Jesus Is Here(区域赛网络赛选拔)
- iOS开发 ----- 网络请求
- HttpRouter项目中的问题
- http-response-codes
- Web APi之HttpClient注意事项以及建议(四)
- 常见的网络图像格式有哪些,在HTML中各适合什么场合?
- 阅读笔记:TCP/IP详解卷1