HttpUrlConnection的应用
16lz
2021-01-26
一、什么是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; } }
外加文件读取权限以及网络请求权限:
更多相关文章
- Android之——退出多个Activity
- 24、从头学Android之多媒体--使用MediaPlayer播放音频
- android 在子线程中如何把自定义对象传到handler中处理
- Android(安卓)Studio学习笔记创建新窗口(activity)并进行跳转
- Android(安卓)Json解析方法
- android Retrofit简单使用及源码分析
- Android创建快捷方式
- Android中Shared Preferences、Files、Network、SQLite数据库编
- Android(安卓)Handler 用法解析