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

使用HTTP协议访问网络

2015-10-03 00:09 543 查看
Android本身提供的WebView已经将发送HTTP请求,接收服务响应,解返回数据,以及最终的页面展示这些工作都封装好。提供了现成的方法供我们调用。

使用HTTP协议发送请求有两种方式可以使用:

1.HttpURLConnection(recommended)

代码

也还是用Handler作为内部类那一套东西,在Handler所在的UI线程里面进行UI更新操作。在Activity的方法里起一个new Thread,在里面发送HttpURLConnection。

package harris.com.network_httpurlconnection;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.TextView;

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

public class MainActivity extends Activity {
// private Button getResponse;
private TextView textShow;

protected void onCreate(Bundle savedInstanceState) {
//getResponse = (Button) findViewById(R.id.getResponse);
textShow = (TextView) findViewById(R.id.text);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sendRequestViaHttpURLConnection();

}
private Handler handler = new Handler(){
public void handleMessage(Message msg) {
String str = (String) msg.obj;
/*下面这段话报空指针错误,然而我打印出str发现不是空的啊,真是哔了狗了*/
textShow.setText(str);

}
};

private void sendRequestViaHttpURLConnection( ) {

new Thread(new Runnable() {
public void run() {
HttpURLConnection connection = null;
try {
URL url = new URL("http://www.baidu.com");
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(8000);
connection.setReadTimeout(8000);
//以下这段全部是Java io流的知识,也是取东西的惯用程序
InputStream in = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder response = new StringBuilder();
String line;

while ((line = reader.readLine()) != null) {
response.append(line);

}
Message message = new Message();
message.obj = response.toString();

handler.sendMessage(message);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (connection != null) {
connection.disconnect();
}
}
}
}).start();

}
}


注意java io流的学习,InputStream 和BufferedReader配合使用。StringBuilder.toString方法的使用。

这两天还学习了关于String在常量池和堆内存的存储知识,非常好。

2.HttpClient(deprecated in Android 6.0)

目前,android studio直接不认HttpClient这个类了,Google在6.0里面开始推荐使用HTtpURLConnection这个类,说这个类效率更高。

就这样。

HttpClient的使用:

还是直接上代码实在一些

HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("http://www.baidu.com");
HttpResponse httpResponse = httpClient.execute(httpGet);
if (httpResponse.getStatusLine().getStatusCode() == 200) {
// 请求和响应都成功了
HttpEntity entity = httpResponse.getEntity();
String response = EntityUtils.toString(entity,
"utf-8");
Message message = new Message();
message.what = SHOW_RESPONSE;
// 将服务器返回的结果存放到Message中
message.obj = response.toString();
handler.sendMessage(message);

代码直接来自郭神的第一行代码,谢郭神。

3.关于OkHttp这个开源库的使用,必须总结。



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: