Android中网络图片的获取和下载

本文介绍如何在Android设备上使用Python通过HTTP请求获取图片,并将其显示在ImageView中,包括处理图片源地址为空的情况。

在布局文件中定义两个按钮,一个EditText和一个ImageView(用来显示图片)

 

public class MainActivity extends Activity {

 EditText et_path;

 ImageView iv;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  et_path = (EditText) findViewById(R.id.et_path);
  iv = (ImageView) findViewById(R.id.iv);

 }

/*
  * handler其实就是消息处理机制。首先在主线程也就是UI创建一个Handler对象,复写其中的handMessage( Message
  * msg)方法。该方法里的msg就是子线程发来的消息,表示子线程处理完了,以这个msg来通知主线程。让主线程来作UI的绘制工作。
  */

 Handler handler = new Handler() {

public void handleMessage(android.os.Message msg) {
   Toast.makeText(MainActivity.this, "图片的源地址不能为空,请输入", 0)
   .show();
  };

 };

因为在主进程中不能有耗时操作(可能会使应用崩溃,毕竟处在等待状态,会使整个应用停滞),所以要用到子线程实现

 public void getpic(View v) {

  new Thread() {
   public void run() {
    String path = et_path.getText().toString().trim();

    if (TextUtils.isEmpty(path)) {
    handler.sendEmptyMessage(0x102);     return;
    }
    try {
     URL url = new URL(path);// 获取URL
     // 建立连接
     HttpURLConnection conn = (HttpURLConnection) url
       .openConnection();

     conn.setConnectTimeout(5000);// 设置连接超时
     conn.setRequestMethod("GET");// 设置请求方式(这里为获取资源)

     int code = conn.getResponseCode();// 获取返回码

     if (code == 200)// 为200则连接成功
     {
      InputStream is = conn.getInputStream();

      Bitmap bmp = BitmapFactory.decodeStream(is);

      iv.setImageBitmap(bmp);

     }
    } catch (Exception e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   };
  }.start();

 }

 public void loadpic(View v) {

  new Thread() {
   public void run() {

    String path = et_path.getText().toString().trim();

    if (TextUtils.isEmpty(path)) {
     handler.sendEmptyMessage(0x102);     return;
    }
    try {
     URL url = new URL(path);// 获取URL
     // 建立连接
     HttpURLConnection conn = (HttpURLConnection) url
       .openConnection();

     conn.setConnectTimeout(5000);// 设置连接超时
     conn.setRequestMethod("GET");// 设置请求方式(这里为获取资源)

     int code = conn.getResponseCode();// 获取返回码

     if (code == 200)// 为200则连接成功
     {
      InputStream is = conn.getInputStream();

      FileOutputStream fos = MainActivity.this
        .openFileOutput("pic.jpg",
          MainActivity.this.MODE_PRIVATE);

      int nRead = 0;

      byte[] buffer = new byte[1024];

      while ((nRead = is.read(buffer)) != -1) {
       fos.write(buffer);
      }

      fos.close();

     }
    } catch (Exception e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   };
  }.start();

 }

}

转载于:https://my.oschina.net/sjh1995/blog/647943

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值