Android通过请求网络获取图片资源

版权声明:转载请注明本文链接 https://blog.csdn.net/qq_31844349/article/details/80330305

在日常的编写Android软件的过程中,避免不了使用网络请求,也不可能使用单机的Android,所以本次讲的是通过Android发送网络请求请求图片的文章。

我先来总结一下网络请求的几个步骤:

  1、将想要请求的图片地址转换成URL类

  2、通过openConnection来建立连接

  3、在编程的时候我避免让用户死等,设置网络连接的超时时间,读取时间

  4、设置请求网络的类型(GET或者POST)

  5、提交网络请求

  6、接受返回码,通过返回码判断网络是否请求成功

注意:这里非常重要,任何网络请求必须加上网络权限 <uses-permission android:name="android.permission.INTERNET"/>

这些是在网络请求中最基本的几个步骤,在我们写的请求网络图片的代码中,还有其余的代码需要补充。

我们代码一步一步的来:

  //将想要请求的图片地址转换成URL类   这个图片的地址有点长

  URL url = newURL("https://timgsa.baidu.com/timg?                image&quality=80&size=b9999_10000&sec=1524759026299&di=47e39d74fe559c7ab60318fb308ab8fa&imgtype=0&src=http%3A%2F%2Fimgstore.cdn.sogou.com%2Fapp%2Fa%2F100540002%2F691448.jpg");

  //通过openConnection来建立连接   这里的HttpURLConnection是openConnection的返回类型

  HttpURLConnection connection = (HttpURLConnection) url.openConnection();

  //在编程的时候我避免让用户死等,设置网络连接的超时时间,读取时间

  //设置连接超时为5秒

connection.setConnectTimeout(5000);

//设置读取超时为5秒

connection.setReadTimeout(5000);

//设置请求网络的类型(GET或者POST)

  connection.setRequestMethod("GET");

  //提交网络请求

  connection.connect();

  //接受返回码  这里接受到的返回码是int类型的

  int code = connection.getResponseCode();

  //通过返回码判断网络是否请求成功

 

  if(code == 200){

 

  //获取连接返回的数据流

 

  InputStream is = connection.getInputStream();

 

  //因为返回的是个图片所以通过位图的方式获取

 

  Bitmap bm = BitmapFactory.decodeStream(is);

 

  //设置消息

 

  Message message = new Message();

 

  message.what = 0;

 

  message.obj = bm;

 

  //通过handler发送消息

 

handler.sendMessage(message);

 

}

 

  

 

在Android中执行耗时操作必须在子线程中执行,所以这里我们需要一个Handler来在主线程中设置ImageView的图片

Handler handler =new Handler(){

     public void handleMessage(Message msg) {

       switch (msg.what) {

        //如果msg.what是0 那么保存图片显示到ImageView中

      case 0:

          //在上面我们发送请求的时候把接受到的图片放到了message中,所以我们这里需要判断是否是相应的数值

          //才确定是否接受这个图片

        Bitmap bm = (Bitmap) msg.obj;

           //设置ImageView图片

        imageView.setImageBitmap(bm);

      break;

    }

     };

};

 

如果说我们的按钮执行请求图片的时,必须在子线程中执行,否则报错;

btnButton这个是按钮

 

 

btnButton.setOnClickListener(new OnClickListener() {
  @Override
  public void onClick(View arg0) {
    //创建子线程
    new Thread(){
      @Override
      public void run() {
        // TODO Auto-generated method stub
        //获取图片
        getPic();
      }
    }.start();
  }

});


猜你喜欢

转载自blog.csdn.net/qq_31844349/article/details/80330305