一、什么是HttpUrlConnection

HttpUrlConnection是java的标准指定网站发送GET请求、post请求类、ttpUrlConnection继承自URLConnection,可用于向指定网站发送GET请求、post请求,httpUrlConnection在使用上相对简单,并且易于扩展,推荐使用。

 

二、如何使用HttpUrlCnnection

   1.创建URL对象。

   2.通过URL对象调用openConnection()方法获得HttpURLConnection对象。

   3.HttpURLConnection对象设置其它连接属性。

   4.HttpURLConnection对象调用getInputstream()方法下向服务器发送http请求并获取到服务器返回的输入流。

   5读取输入流,转换成String字符串。
 

三、使用HttpUrlConnection获取Http请求

public class MainActivity extends AppCompatActivity {   private Button getwebBtn;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        bindID();        getwebBtn.setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View view) {        new Thread(new Runnable() {            @Override            public void run() {                getWebInfo();            }        }).start();    }});    }    private void getWebInfo() {        try {                //找水源,创建URL                URL url=new URL("http://mp.blog.csdn.net/postedit/79528472/");                //开水闸-openConnection                HttpURLConnection httpURLConnection= (HttpURLConnection) url.openConnection();                //建水管-InputStream                InputStream inputStream=httpURLConnection.getInputStream();                //建蓄水池蓄水-InputStreamReader                InputStreamReader reader=new InputStreamReader(inputStream,"UTF-8");                //水桶盛水-BufferedReader                BufferedReader bufferedReader=new BufferedReader(reader);                StringBuffer stringBuffer= new StringBuffer();                String temp=null;                while ((temp=bufferedReader.readLine())!=null){                    stringBuffer.append(temp);                }                bufferedReader.close();                reader.close();                inputStream.close();                Log.e("MAIN",stringBuffer.toString());            } catch (MalformedURLException e) {                e.printStackTrace();            } catch (IOException e) {                e.printStackTrace();            }    }    private void bindID() {        getwebBtn=findViewById(R.id.getweb_btn);    }    class MyThread implements Runnable{        @Override        public void run() {        }}

  

Xml:

  

 

四、使用HttpURLConnection加载网络图片

加载网络图片,需要用到Bitmap对象。 
加载网络图片有时也需耗时较长时间,所以也应该异步加载。 

ImgActivity代码如下:

package lenovo.wangmengyuan.http;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.ImageView;import android.widget.ProgressBar;public class ImgActivity extends AppCompatActivity {    private Button loadbt;    private ImageView loadimg;    private ProgressBar progressBar;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_img);        bindID();        loadbt.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {         //       ImgloadTask task=new ImgloadTask(loadimg);             //   task.execute("http://img5.imgtn.bdimg.com/it/u=717372819,1556613902&fm=27&gp=0.jpg");                loadbt.setEnabled(false);                            }        });    }    private void bindID() {        loadbt=findViewById(R.id.loadpig_bt);        loadimg=findViewById(R.id.loadpig_img);    }}

  

XML:

  

ImgLoadTask:

package lenovo.wangmengyuan.http;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.AsyncTask;import android.widget.ImageView;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;/** * Created by Administrator on 2018/3/13. */public class ImgloadTask extends AsyncTask {private ImageView imageView;    //为什么要加一个构造方法-因为我们有传值的需求    public  ImgloadTask(ImageView iv){        this.imageView=iv;    }    @Override    protected Bitmap doInBackground(String... strings) {        Bitmap bm=null;        try {          URL  url = new URL(strings[0]);            HttpURLConnection connection= (HttpURLConnection) url.openConnection();            InputStream inputStream=connection.getInputStream();            bm= BitmapFactory.decodeStream(inputStream);        } catch (MalformedURLException e) {            e.printStackTrace();        }        catch (IOException e) {            e.printStackTrace();        }        //加载网络图片,最后获取到一个Bitmap对象,返回Bitmap对象        return bm;    }    @Override    protected void onPostExecute(Bitmap s) {        super.onPostExecute(s);        imageView.setImageBitmap(s);    }}

  

五、使用HttpURLConnection下载网络资源

ImgActivity.java代码:

package lenovo.wangmengyuan.http;import android.Manifest;import android.support.annotation.NonNull;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.ImageView;import android.widget.ProgressBar;import com.master.permissionhelper.PermissionHelper;import java.security.Permission;public class ImgActivity extends AppCompatActivity {    private Button loadbt;    private ImageView loadimg;    private ProgressBar progressBar;    private String picUrl="http://http://pic3.nipic.com/20090623/2512829_165609054_2.jpg";    private PermissionHelper permissionHelper;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_img);        bindID();      loadbt.setOnClickListener(new View.OnClickListener() {          @Override          public void onClick(View view) {permissionHelper=new PermissionHelper(ImgActivity.this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},100);       permissionHelper.request(new PermissionHelper.PermissionCallback() {           @Override           public void onPermissionGranted() {               DownLoad2 task=new DownLoad2(ImgActivity.this,loadimg);               task.execute(picUrl,"ghh.jpg");           }           @Override           public void onIndividualPermissionGranted(String[] grantedPermission) {           }           @Override           public void onPermissionDenied() {           }           @Override           public void onPermissionDeniedBySystem() {           }       });// new DownLoad2(ImgActivity.this,loadimg).execute(picUrl,"gff.jpg");          }      });         //       ImgloadTask task=new ImgloadTask(loadimg);             //   task.execute("http://img5.imgtn.bdimg.com/it/u=717372819,1556613902&fm=27&gp=0.jpg");                //loadbt.setEnabled(false);               // DownLoadTask dTask = new DownLoadTask(ImgActivity.this,loadbt,progressBar);               // dTask.execute("http://img1.bitautoimg.com/bitauto/2012/09/17/a50cdcf8-1a2a-418b-b7be-d81f36ab12ee.jpg\",\"fra.jpg");            }    private void bindID() {        loadbt=findViewById(R.id.loadpig_bt);        loadimg=findViewById(R.id.loadpig_img);    }    @Override    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {        super.onRequestPermissionsResult(requestCode, permissions, grantResults);        if (permissionHelper!=null){            permissionHelper.onRequestPermissionsResult(requestCode, permissions, grantResults);        }    }}

DownLoad2代码如下:

public class DownLoad2 extends AsyncTask {    private String dirPath;//下载目录的途径    private String filePath;//文件储存位置,列入    private ImageView loading;    private Context context;    public   DownLoad2(Context context,ImageView loading){    this.context=context;     this.loading=loading;}    InputStream inputStream=null;    OutputStream o =null;    @Override    protected Integer doInBackground(String... strings) {        String fileName=strings[1];//存储图片的名字        //判断目录是否存在,不存在,创建目录        dirPath= Environment.getExternalStorageDirectory() + "/"+"http_download/";        File dir=new File(dirPath);//创建文件对象        if (dir.exists()){            dir.mkdir();        }//判断文件是否存在,不存在创建        filePath=dirPath+fileName;        File file=new File(filePath);        if (file.exists()){            return -1;        }        else {            try {                file.createNewFile();//不存在创建新的            } catch (IOException e) {                e.printStackTrace();            }        }        InputStream inputStream=null;        FileOutputStream outputStream=null;        URL url= null;        try {            url = new URL(strings[0]);        } catch (MalformedURLException e) {            e.printStackTrace();        }        try {            HttpURLConnection connection= (HttpURLConnection) url.openConnection();            if (connection.getResponseCode()==200){                //判断返回码是否正常,若                inputStream=connection.getInputStream();            }            else {                return -2;            }            outputStream=new FileOutputStream(file);            int length=0;            byte[] buffer=new byte[4*1024];            while ((length=inputStream.read(buffer))!=-1){                outputStream.write(buffer,0,length);            }            outputStream.close();            inputStream.close();        } catch (IOException e) {            e.printStackTrace();        }        return 1;    }    @Override    protected void onPostExecute(Integer integer) {        super.onPostExecute(integer);        switch (integer){            case 1:                //正常下载完成                Toast.makeText(context,"下载完成",Toast.LENGTH_SHORT).show();                Bitmap bm= BitmapFactory.decodeFile(filePath);                loading.setImageBitmap(bm);                break;            case -1:                //文件已存在                Toast.makeText(context,"文件已存在",Toast.LENGTH_SHORT).show();                break;            case -2:                //网络异常                Toast.makeText(context,"网络异常",Toast.LENGTH_SHORT).show();                break;        }    }

外加文件读取权限以及网络请求权限:

  

更多相关文章

  1. Android之——退出多个Activity
  2. 24、从头学Android之多媒体--使用MediaPlayer播放音频
  3. android 在子线程中如何把自定义对象传到handler中处理
  4. Android(安卓)Studio学习笔记创建新窗口(activity)并进行跳转
  5. Android(安卓)Json解析方法
  6. android Retrofit简单使用及源码分析
  7. Android创建快捷方式
  8. Android中Shared Preferences、Files、Network、SQLite数据库编
  9. Android(安卓)Handler 用法解析

随机推荐

  1. 回答两个被频繁问到的代码写法问题
  2. synchronized和Lock
  3. git学习记录
  4. ElasticSearch API & 文档 curd 操作
  5. Elasticsearch aggs 聚合
  6. 版本管理·玩转git(快速入门git)
  7. Spring 响应式编程 随记 -- C1 为什么选
  8. 创建商城项目数据库表
  9. 追格小程序分销推广返现计划来了,zui高30%
  10. 记录下我的副业,4个月赚200%,门槛不高