1.什么是Http请求
Http请求是客户端和服务端之间,发送请求和返回应答的标准(TCP)。
客户端·发送一个Http请求后,就与服务器建立起了TCP连接,服务端接到请求并进行处理后返回给客户端响应数据。
2.什么是HttpUrlConnection
HttpURLconnection是基于http协议的,支持get,post,put,delete等各种请求方式,最常用的就是get和post。
3.如何使用HttpUrlConnection
创建URL对象;
通过URL对象调用openConnection()方法获得HttpUrlConnection对象;
HttpUrlConnection对象设置其他连接属性;
HttpUrlConnection对象调用getInputstream方法向服务器发送http请求;
读取输入流,转换成String字符串。
注意点:
在安卓中访问网络必须添加访问网络权限!
在安卓中访问网络必须放在子线程中进行!
4.使用HttpUrlConnection获取HTTP请求实例
首先加一下访问网络权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
然后开始进行代码编写
public class MainActivity extends AppCompatActivity {
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bindId();
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//安卓异步操作
new Thread(new Runnable() {
@Override
public void run() {
getWebinfo();
}
}).start();
}
});
}
private void getWebinfo() {
try {
//1.找水源---创建URL(统一资源定位器)
URL url=new URL("http://www.baibu.com/");
//2.开水闸---openCOnnection
HttpURLConnection httpURLConnection= (HttpURLConnection) url.openConnection();
//3.建管道---InputStream
InputStream inputStream=httpURLConnection.getInputStream();
//4.建蓄水池---InputStreamReader
InputStreamReader inputStreamReader=new InputStreamReader(inputStream,"UTF-8");
//5.水桶盛水——BufferedReader
BufferedReader bufferedReader=new BufferedReader(inputStreamReader);
StringBuffer stringBuffer=new StringBuffer();
String temp=null;
//循环做盛水工作---while循环
while ((temp=bufferedReader.readLine())!=null){
stringBuffer.append(temp);
}
//关闭水池入口,从管道到水桶
bufferedReader.close();
inputStreamReader.close();
inputStream.close();
//打印日志
Log.e("Main",stringBuffer.toString());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//绑定Id
private void bindId() {
button=findViewById(R.id.cc);
}
}
最后得到以下图片就成功了。
2)实例二加载图片
先写布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.ll.skt.CmsActivity">
<Button
android:text="加载图片"
android:id="@+id/jaizaitup"
android:layout_width="match_parent"
android:layout_height="50dp" />
<ImageView
android:scaleType="fitCenter"
android:id="@+id/tupian"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
接着创一个class类继承AsyncTask抽象方法
package com.example.ll.skt;
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 ll on 2018/3/13.
*/
public class Imgload extends AsyncTask<String,Integer,Bitmap> {
private ImageView imageView;
//为什么要加一个构造方法-----因为有传值需求
public Imgload(ImageView imageView){
this.imageView=imageView;
}
@Override
protected Bitmap doInBackground(String... strings) {
//加载图片,最后获得一个Bitma对象,返回Bitmap对象
Bitmap bitmap=null;
try {
URL url=new URL(strings[0]);
HttpURLConnection httpURLConnection= (HttpURLConnection) url.openConnection();
InputStream inputStream=httpURLConnection.getInputStream();
bitmap= BitmapFactory.decodeStream(inputStream);//把输入流转换成Bitmap类型对象
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}
@Override
protected void onPostExecute(Bitmap s) {
super.onPostExecute(s);
imageView.setImageBitmap(s);
}
}
最后在Activity进行图片地址填写
package com.example.ll.skt;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
public class CmsActivity extends AppCompatActivity {
private Button btn;
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cms);
BindId();
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Imgload task=new Imgload(imageView);
task.execute("http://img31.mtime.cn/mg/2012/10/30/201631.37192876.jpg");
}
});
}
private void BindId() {
btn=findViewById(R.id.jaizaitup);
imageView=findViewById(R.id.tupian);
}
}
产生效果图如下