package com.example.justin.httpurlconnection;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.io.BufferedReader;
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 implements View.OnClickListener {
public static final int SHOW_RESPONSE=0;
private Button sendRequest;
private TextView responseText;
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what){
case SHOW_RESPONSE:
String response= (String) msg.obj;
responseText.setText(response);
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
sendRequest= (Button) findViewById(R.id.send_request);
responseText= (TextView) findViewById(R.id.request_text);
sendRequest.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (v.getId()==R.id.send_request){
sendRequestWithHttpURLConnection();
}
}
private void sendRequestWithHttpURLConnection() {
new Thread(new Runnable() {
@Override
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);
InputStream in=connection.getInputStream();
BufferedReader reader=new BufferedReader(new InputStreamReader(in));
StringBuilder response=new StringBuilder();
String line;
while ((line=reader.readLine())!=null){
//在response字符串后面追加字符串
response.append(line);
}
/*1.当需要执行一些耗时操作,如:发起一条网络请求时,由于网速等原因,服务器未必会立刻响应我们的请求
如果不将这类操作放在子线程里运行,就会导致主线程被阻塞住,从而影响用户对软件的正常使用。
* 2.子线程中无法对UI进行操作,所以创建一个Message对象,并使用Handler将它发送出去,之后在Handler
* 的handleMessage()方法中对这条Message进行处理。
* */
Message message=new Message();
//设置标识
message.what=SHOW_RESPONSE;
message.obj=response.toString();
handler.sendMessage(message);
} catch (Exception e) {
e.printStackTrace();
}finally {
if(connection!=null){
connection.disconnect();
}
}
}
}).start();
}
}