activity_main.xml

<?xml version="1.0" encoding="utf-8"?>xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="www.hui2wulian.com.httphuiapplication.MainActivity">            android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="下载图片"        android:onClick="click"/>            android:id="@+id/iv"        android:layout_width="wrap_content"        android:layout_height="wrap_content" />

MainActivity.java

package www.hui2wulian.com.httphuiapplication;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.ImageView;import android.widget.Toast;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.net.URLConnection;public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }    public void click(View view){        //下载图片        String path="http://img07.tooopen.com/images/20170323/tooopen_sy_202923944295.jpg"; //1.确定网址        try {            URL url=new URL(path);  //2.把网址封装成一个url对象(网址是个字符串,封装成url对象)。此处URL url=new URL(path);写完有红处,需要try,catch一下            HttpURLConnection conn= (HttpURLConnection) url.openConnection();//3.获取客户端与服务器的连接对象(到这,还没有去建立连接(即还没            //有产生任何的网络交互))。 用方法openConnection(直译是打开连接(对象),是网址跟服务器            // 建立连接的连接对象),返回的是URLConnection( URLConnection conn=url.openConnection();),            // 需要强转成HttpURLConnection,并导包            conn.setRequestMethod("GET");     //设置请求方法,注意大写            // 对连接对象进行初始化,设置你建立连接时所你需要传入的参数。连接对象的建立就是客户端给服务器发送的请求,1要设置请求方式,conn.setRequestMethod("GET");            //HTTP请求有2种方法:"GET"和"POST",请求是浏览器帮你发出去的,提供数据时使用"POST"。而在代码中需要手动设定            conn.setConnectTimeout(5000);//设置连接超时(超时时间8,10,20s),(连接)请求发出去,超过5s钟服务器没有任何响应(服务器5s钟没有任何响应),            // 那就是连接(请求)超时。可能原因是自己网络不好,或是网址错,服务器根本就请求不到,又怎么会有响应呢。            conn.setReadTimeout(5000);//设置读取超时。请求发出去了服务器有相应了(网址是对的),但超过5s钟服务器都没有把流传给你(服务器是通            // 过流把数据写给客户端的),服务器有响应了,但是5s钟都没有把流给我们,客户端拿不到数据,就会报读取超时。            //这3个设置好了,就基本上OK了,可以去请求发送请求了            conn.connect();//5.发送请求,与服务器建立联系。用connect()方法,这段代码一旦执行就产生网络交互了,这时(这个时候)连接才正式建立。            //请求发出去了到底是成功还是失败呀,(咱们怎么知道呢)通过状态码来判断(如果是200,就成功了,如果非200开头,就是失败了。            // (如最常见的404是页面不存在,就是path的资源根本就不存在(那就是404),如果是500(就是报bug了,500开头的一个东西)))            if (conn.getResponseCode()==200){  //如果响应码为200,说明请求成功。(怎么判断呢)拿到状态码(或是叫做响应码都可以,在不同                // 的API当中,他的单词(ResponseCode)不一样,有的地方叫做ResponseCode,有的地方叫做StatusCode,反正知道这个东西就行),是一个数字。                //请求成功,服务器应该给了我们一个流(如果请求成功的话,一定会有这个流。若没有这个流,就说明你请求失败了(服务器给你响应了,但是                // 是失败的响应,如果是成功的响应,就会拿到这个流)。)                InputStream is=conn.getInputStream();//获取服务器响应头中的流,流里的数据就是客户请求的数据(也就是叮当的图片就在流里面了)。那我们就拿到这个                // 流conn.getInputStream();(再(后)写前面的InputStream is)。                Bitmap bm= BitmapFactory.decodeStream(is);//读取出流里的数据,并构成位图对象。从流里读数据:创建一个byte[](byte数组)(byte[] b),再is.read(b)。                // 现在的话其实不用这么麻烦,因为我们知道流里面的数据,就是张图片,                //Android提供了一个很方便的API直接把流里的数据读取出来,然后构造成一张图片。Android中一个API叫做Bitmap(位图的意思,在Android中表示一张图片),                //BitmapFactory(位图工厂)是用来生产Bitmap(位图)对象的,在BitmapFactory中有几个方法(decode...),使用来生产位图的。其中有一个叫decodeStream                // ()(就是通过一个输入流,构造位图)返回的是位图。构造出的bm就是叮当图片了,把他写在界面上(扔到ImageView里面去)就OK了。                ImageView iv= (ImageView) findViewById(R.id.iv);//拿到iv对象                iv.setImageBitmap(bm);//把位图对象显示至imageview。给ImageView设置显示内容(iv.set什么什么,给Image设置对象,就是setImageResource(resId)                // (设置图片资源,参数数资源id(指定设置图片),但这里明显不是,因为我们没有资源id(Bitmap没有资源id)。用setImageBitmap(直接把位图对象扔进去))                // setImage什么什么,(其中用的较多就是setImageResource()。))                //添加权限(访问网络的话有可能是要钱的(要是用手机用流量访问网络是需要钱的)),访问网络权限叫INTERNET(internet)(android.permission.INTERNET)                //                //创建连接对象,发送HTTP请求,获取图片,最终把他显示到界面上。            }            else {                Toast.makeText(this,"请求失败",Toast.LENGTH_SHORT).show();//如果失败就弹个吐司。不用MainActivity.this,直接this就行。                // 请求失败原因有多钟,(开发中的话)我们要通过具体的响应码判断是哪一种(这里就先不判断了)。            }        } catch (Exception e) {   //将MalformedURLException改为Exception            e.printStackTrace();        }    }}



更多相关文章

  1. android实现从网上获取数据
  2. 12.8 SeekBar和RatingBar
  3. android Volley Post 请求失败
  4. Android栗子の图片验证码生成
  5. android 文件的压缩和解压
  6. Android开机动画视频
  7. Android(安卓)APK下载安装(自动更新)
  8. Android拍照,读取相册
  9. android手势滑动关闭当前activity

随机推荐

  1. 洞玩年!刚面世的黑洞照片快被玩坏了!
  2. 直观讲解一下 RPC 调用和 HTTP 调用的区
  3. Apollo 源码解析 —— 调试环境搭建
  4. 白嫖七牛云作为个人博客免费图床
  5. 第九周作业
  6. 芋道 RocketMQ 安装部署
  7. Mybatis-Plus 真好用(乡村爱情加持)
  8. 国产微服务网关 APISIX,有点意思,直接开锤,
  9. 程序羊有知识星球了
  10. JavaScript 诞生25周年,这26个里程碑值得