1 、HttpURLConnection发送GET请求步骤
创建URL对象;
通过URL对象调用openConnectiom对象;
HttpURLConnection对象设置其他链接属性;
HttpURLConnection对象调用getInputStream()方法向服务器发送http请求并获取到服务器返回的输出流;
读取输出流,转换为string字符串
2、HttpURLConnection发送POST请求步骤
创建URL对象;
通过URL对象调用openConnectiom对象;
HttpURLConnection对象调用setOutMetthod(String method)设置请求方式;
HttpURLConnection对象设置其他链接属性;
HttpURLConnection对象调用getInputStream()方法,输出流写入数据,向服务器传参;
HttpURLConnection对象调用getInputStream()方法向服务器发送http请求并获取到服务器返回的输出流;
读取输出流,转换为string字符串
3、两种请求方式对比
get:显示请求方式,请求参数会显示在URL上,相对快,安全性低,请求数据大小有限。
post:隐形请求方式,请求参数会在http请求的实体内容中进行传输,相对慢,安全性较高,请求数据大小无限制。
4、HttpURLConnection请求网络数据实例:
因为请求网络数据是一个耗时操作(对于计算机而言几秒的运算也是耗时操作),所以需要开启一个线程,在子线程中做耗时操作,所以要在单击事件中添加一个线程用于请求网络数据,线程代码如下:
public void onClick(View v) {
switch (v.getId()) {
//请求网络数据按钮的单击事件
case R.id.web_btn:
new Thread(new Runnable() {
@Override
public void run() {
//getWenInfo();
getwbImg();
}
}).start();
//请求网络图片的按钮的单击事件
case R.id.web_imgbtn:
new Thread(new Runnable() {
@Override
public void run() {
//调用请求网络数据的方法
getWenInfo();
//调用请求网络图片的方法
getwbImg();
}
}).start();
}
写一个方法getWenInfo();
private void getWenInfo() {
try {
//创建url地址对象
URL url = new URL(“https://www.baidu.com/“);
//创建connection对象
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
//创建输入流对象
InputStream sream = connection.getInputStream();
//创建Reader对象
InputStreamReader reader = new InputStreamReader(sream);
//创建BufferedReader对象
BufferedReader bufferedrader = new BufferedReader(reader);
//开始读取
String temp = “”;
StringBuffer stringbuffer = new StringBuffer();
while ((temp = bufferedrader.readLine()) != null) {
stringbuffer.append(temp);
Log.e(stringbuffer.toString(), “zzzzz”);
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
HttpURLConnection加载网络图片实例:
这里要通过handler.obtainMessage()给主线程发送消息要用到之前所学习的handler
实例化handler并且用handleMessage接收子线程发送的消息
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Bitmap btp= (Bitmap) msg.obj;
//图片是Bitmap型的所以要用Bitmap接收
image1_web.setImageBitmap(btp);
}
};
请求网络图片的方法:
private void getwbImg() {
try {
//创建url地址对象
URL url=new URL(“https://b-ssl.duitang.com/uploads/item/201407/10/20140710050947_mM3TP.jpeg“);
//创建connection对象
HttpURLConnection connection= (HttpURLConnection) url.openConnection();
//创建输入流对象
InputStream inputStream=connection.getInputStream();
//
Bitmap bitmap= BitmapFactory.decodeStream(inputStream);
//通过调用handler.obtainMessage()实例化message
Message message=handler.obtainMessage();
//用obj接收其所传的图片
message.obj=bitmap;
//发送消息
handler.sendMessage(message);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
5、String,Stringbuffer,StringBulder的区别
String:创建多个对象,零散的,是不可变的;串联的效率最慢
Stringbuffer:创建一个对象,是可变的:多线程安全的
StringBulder:单线程下字符串的串联;是可变的;是线程不安全的(StringBuffer的append操作用了synchronized)