HTTP连接网络一.HTTP初识1.HTTP协议简介: HTTP (Hypertext Transfer Protocol )”超文本传输协议”,是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种协议。 2.Get与Post的主要区别简单来说:Get与Post就是基于http协议的网络数据交互方式。 1.Get请求属于明文传参,地址栏可以看见参数,调用简单不安全数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连,如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD。如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。 POST把提交的数据则放置在是HTTP包的包体中。 - 2.get是把参数数据队列加到表单的 ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到,实际上就是URL拼接方式。post是通过HTTPpost机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。 - 3.get 传送的数据量较小,不能大于1KB[IE,Oher:4]。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。 - 4.get安全性非常低,post安全性较高。 二.使用HTTP完成网络连接的步骤1.我们使用一个简单的例子:在点击按钮后访问完成连接,并在控制台打印一句话。![这里写图片描述 android连接WIFI是什么意思 安卓连接是什么意思_android](https://s2.51cto.com/images/blog/202307/03180802_64a29e02c3d2227177.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
![这里写图片描述 android连接WIFI是什么意思 安卓连接是什么意思_ide_02](https://s2.51cto.com/images/blog/202307/03180802_64a29e02d81f39876.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184) 步骤一. 创建URL对象![这里写图片描述 android连接WIFI是什么意思 安卓连接是什么意思_ide_03](https://s2.51cto.com/images/blog/202307/03180803_64a29e034467020212.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
创建一个连接网络的方法getWeb() private void getWeb() {
/* URL url=new URL("https://www.baidu.com/");需要异常处理*/
try {
URL url=new URL("https://www.baidu.com/");
HttpURLConnection connection= (HttpURLConnection) url.openConnection();
InputStream inputStream=connection.getInputStream();
InputStreamReader inputStreamReader=new InputStreamReader(inputStream);
BufferedReader bufferedReader=new BufferedReader(inputStreamReader);
String temp="";
StringBuffer stringBuffer=new StringBuffer();
while ((temp=bufferedReader.readLine())!=null){
stringBuffer.append(temp);
}
Log.d("连接成功------------------", "getWeb: ");
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}在按钮的点击事件中调用btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new Thread(new Runnable() {
@Override
public void run() {
getWeb();
}
}).start();
}
});注意: 最后需要在注册文件中添加请求![这里写图片描述 android连接WIFI是什么意思 安卓连接是什么意思_HTTP_04](https://s2.51cto.com/images/blog/202307/03180803_64a29e035539d55522.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184) 注意:- URL url=new URL(“https://www.baidu.com/“); URL的书写格式”/”结束。- 单击事件中要创建一个子线程,访问网络也属于耗时操作,不可以在主线程中进行。2.实现网络图片的访问点击访问图片按钮 ![这里写图片描述 android连接WIFI是什么意思 安卓连接是什么意思_HTTP_05](https://s2.51cto.com/images/blog/202307/03180803_64a29e0362ad66712.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184) package com.example.a22120.day5_http_class;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.nfc.Tag;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class MainActivity extends AppCompatActivity {
private Button btn,btn_img;
private ImageView image_http;
Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//使用handler实现在主线程中更新UI的操作
handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Bitmap bi= (Bitmap) msg.obj;
image_http.setImageBitmap(bi);
}
};
btn=findViewById(R.id.fw);
btn_img=findViewById(R.id.btn_tp);
image_http=findViewById(R.id.img_http);
btn_img.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new Thread(new Runnable() {
@Override
public void run() {
getWebImg();
}
}).start();
}
});
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new Thread(new Runnable() {
@Override
public void run() {
getWeb();
}
}).start();
}
});
}
//访问网络图片的方法
private void getWebImg() {
try {
URL url=new URL("http://img1.imgtn.bdimg.com/it/u=4054610911,701962612&fm=27&gp=0.jpg");
HttpURLConnection httpURLConnection= (HttpURLConnection) url.openConnection();
InputStream inputStream=httpURLConnection.getInputStream();
Bitmap bitmap=BitmapFactory.decodeStream(inputStream); //bitmapFactory birmap加工厂
Message message=handler.obtainMessage();
message.obj=bitmap;
handler.sendMessage(message);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private void getWeb() {
/* URL url=new URL("https://www.baidu.com/");需要异常处理*/
try {
URL url=new URL("https://www.baidu.com/");
HttpURLConnection connection= (HttpURLConnection) url.openConnection();
InputStream inputStream=connection.getInputStream();
InputStreamReader inputStreamReader=new InputStreamReader(inputStream);
BufferedReader bufferedReader=new BufferedReader(inputStreamReader);
String temp="";
StringBuffer stringBuffer=new StringBuffer();
while ((temp=bufferedReader.readLine())!=null){
stringBuffer.append(temp);
}
Log.d("连接成功------------------", "getWeb: ");
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}UI代码:
三.String StringBuffer StringBuilder有什么区别String字符串常量,String 是不可变的对象 StringBuffer字符串变量(线程安全,多线程下操作大量的数据用StringBuffer) StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。 StringBuilder字符串变量(非线程安全,单线程下操作大量的数据就使用StringBuilder) 在执行速度上:StringBuilder–>StringBuffer–>StringString 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象。StringBuffer 类则结果就不一样了,每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。
|