欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

使用HttpURLConnection实现图片的下载与现显示,,虽然我们在开发中经常使用

来源: javaer 分享于  点击 49420 次 点评:128

使用HttpURLConnection实现图片的下载与现显示,,虽然我们在开发中经常使用


虽然我们在开发中经常使用别人已经开发好的开源框架,但是,了解这些框架底层的实现,能够让我们更好的理解功能的实现。

这篇文章主要介绍使用HttpURLConnection对象,实现图片文件的下载,以及显示。

我们的思路是,首先使用HttpURLConnection实现图片文件的下载,在下载结束之后,使用handler异步的显示图片。

public class MainActivity extends Activity {      private Context mContext;      private ImageView image;      // 加载成功      private static final int LOAD_SUCCESS = 1;      // 加载失败      private static final int LOAD_ERROR = -1;      // 用于异步的显示图片      private Handler handler = new Handler() {          public void handleMessage(Message msg) {              switch (msg.what) {              //下载成功              case LOAD_SUCCESS:                  // 获取图片的文件对象                  File file = new File(Environment.getExternalStorageDirectory(), "pic.jpg");                  FileInputStream fis = null;                  try {                      fis = new FileInputStream(file);                      Bitmap bitmap = BitmapFactory.decodeStream(fis);                      image.setImageBitmap(bitmap);                  } catch (FileNotFoundException e) {                      e.printStackTrace();                  }                  break;                  //下载失败              case LOAD_ERROR:                  Toast.makeText(mContext, "加载失败", 0).show();                  break;              }          };      };      @Override      protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          mContext = this;          setContentView(R.layout.activity_main);          image = (ImageView) findViewById(R.id.image);      }      // Button的点击事件      public void show(View view) {          // 开启新的线程用于下载图片          new Thread(new Runnable() {              public void run() {                  getPicture();              }          }).start();      }      //下载图片的主方法      private void getPicture() {          URL url = null;          InputStream is = null;          FileOutputStream fos = null;          try {              //构建图片的url地址              url = new URL("http://avatar.csdn.net/C/6/8/1_bz419927089.jpg");              //开启连接              HttpURLConnection conn = (HttpURLConnection) url.openConnection();              //设置超时的时间,5000毫秒即5秒              conn.setConnectTimeout(5000);              //设置获取图片的方式为GET              conn.setRequestMethod("GET");              //响应码为200,则访问成功              if (conn.getResponseCode() == 200) {                  //获取连接的输入流,这个输入流就是图片的输入流                  is = conn.getInputStream();                  //构建一个file对象用于存储图片                  File file = new File(Environment.getExternalStorageDirectory(), "pic.jpg");                  fos = new FileOutputStream(file);                  int len = 0;                  byte[] buffer = new byte[1024];                  //将输入流写入到我们定义好的文件中                  while ((len = is.read(buffer)) != -1) {                      fos.write(buffer, 0, len);                  }                  //将缓冲刷入文件                  fos.flush();                  //告诉handler,图片已经下载成功                  handler.sendEmptyMessage(LOAD_SUCCESS);              }          } catch (Exception e) {              //告诉handler,图片已经下载失败              handler.sendEmptyMessage(LOAD_ERROR);              e.printStackTrace();          } finally {              //在最后,将各种流关闭              try {                  if (is != null) {                      is.close();                  }                  if (fos != null) {                      fos.close();                  }              } catch (Exception e) {                  handler.sendEmptyMessage(LOAD_ERROR);                  e.printStackTrace();              }          }      }  }  
相关栏目:

用户点评