您的位置:首页 > 理论基础 > 计算机网络

Android进阶之路 - HttpURLConnection的使用详解

2017-02-03 19:56 786 查看
大家都清楚网络请求在Android中是必不可少的,当然但凡是在移动端,网络请求都是必需的,而Android在2.0之前使用的是HttpClient,而2.0之后就是使用的HttpURLConnection,当下的一些网络框架或者说是工具,基本都是基于HttpURLConnection进行开发使用的,如Volley,Okhttp等(这些之后都会为大家带来详解,链接之后会写在文章中),下面为大家带来的是HttpURLConnection的详细使用。

效果图:



MainActivity Code:

package com.example.urlconnection;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {

private Button mBtn;
private TextView mData;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

initView();

}

private void initView() {
mBtn = (Button) findViewById(R.id.bt_Button);
mData = (TextView) findViewById(R.id.tv_data);

mBtn.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
new Thread(new Runnable() {

private BufferedReader bufferedReader;
private StringBuilder stringBuilder;

@Override
public void run() {
HttpURLConnection concection=null;
try {
//我们要请求的后台网址
URL url = new URL("http://www.baidu.com");
//通过Url建立请求
concection = (HttpURLConnection) url.openConnection();
//请求方式
concection.setRequestMethod("GET");
//链接超时
concection.setConnectTimeout(6666);
//读书数据超时
concection.setReadTimeout(6666);
//获取网上输出流
InputStream inputStream = concection.getInputStream();
//进行读取
bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
//创建容器用于存储
stringBuilder = new StringBuilder();
//判断容器状态
String line;
while((line=bufferedReader.readLine())!=null){
stringBuilder.append(line);
}
//返回主线程我们读取到的信息
runOnUiThread(new Runnable() {
public void run() {
mData.setText(stringBuilder);
}
});
} catch (IOException e) {
e.printStackTrace();
}
//这个大家知道Java应该都清楚,这个是必然会执行的一个操作- 这里其实都是在请求完毕执行的操作,意图在于减少内存泄漏的可能
finally{
if(bufferedReader!=null){
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
//请求完之后断开链接
if(concection!=null){
concection.disconnect();
}
}
}
}).start();
}
});
}
}


MainActivity Xml Code:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<Button
android:id="@+id/bt_Bu
4000
tton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="发送网络请求" />
<TextView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:id="@+id/tv_data"
android:gravity="center"
android:text="respones返回数据区"
/>
</LinearLayout>


注意点:

1.网络请求,请注意添加网络权限

2.在代码中我们引用的是HttpURLConnection,千万别误写为HttpConnection,因为完全俩个意思,从单词就可以看出,一个是通过URL进行链接,一个只是链接,肯定有问题的

3.runOnUiThread也可以使用Handler代替
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 网络 框架