1,核心方法:
URL url = new URL(path);
// [1]通过url对象获取HttpURLConnection 像服务器发送一个请求
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//[2]设置请求的方式
conn.setRequestMethod("GET"); //默认是get 注意:get要大写
//[3]设置访问的连接时间
conn.setConnectTimeout(5000);
//[4]获取服务器返回的状态码
int code = conn.getResponseCode();
//[5]获取流
InputStream in = conn.getInputStream();
2,Demo
1,布局:
public class MainActivity extends Activity {
protected static final int REQUESTSUCESS = 0; //ctrl + shift + X 变大写
protected static final int REQUESTFAIL = 1;
protected static final int REQUESTEXCEPTION= 2;
private TextView tv_content;
private EditText et_urlpath;
private Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {
//[0]根据消息的标识写对应的业务逻辑
switch (msg.what) {
case REQUESTSUCESS: //代表请求成功
//[1]获取消息的携带的数据
String content = (String) msg.obj;
//[2]展示数据
tv_content.setText(content);
break;
case REQUESTFAIL:
tv_content.setText("");
Toast.makeText(getApplicationContext(), "请求失败", 1).show();
break;
case REQUESTEXCEPTION:
tv_content.setText("");
Toast.makeText(getApplicationContext(), "服务器忙", 1).show();
break;
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//加载布局
setContentView(R.layout.activity_main);
// [1]获取我们关心的控件
tv_content = (TextView) findViewById(R.id.tv_content);
et_urlpath = (EditText) findViewById(R.id.et_urlpath);
}
// 实现按钮点击事件
public void click(View v) {
//创建一个子线程
new Thread() {
public void run() {
try {
// [1]获取要访问url路径
String path = et_urlpath.getText().toString().trim();
// [2]创建一个url对象 指定要访问的url路径
URL url = new URL(path);
// [3]通过url对象获取HttpURLConnection 像服务器发送一个请求
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//[4]设置请求的方式
conn.setRequestMethod("GET"); //默认是get 注意:get要大写
//[5]设置访问的连接时间
conn.setConnectTimeout(5000);
//[6]获取服务器返回的状态码
int code = conn.getResponseCode();
//[7]当状态码是200的时候 代表请求成功 获取服务器返回的数据 数据都是以流的形式返回
if(code == 200){
InputStream in = conn.getInputStream();
//[8]由于把in里面的数据转换成String 是一个非常常见的操作 最好做成一个工具类
String content = StreamUtils.parserInputStream(in);
//[9]把流里面的数据展示到textview上 在这块发消息 使用我们创建的handler
Message msg = new Message();
//[10]给当前msg打上一个标识
msg.what = REQUESTSUCESS;
msg.obj = content;
handler.sendMessage(msg);
}else {
//当状态码不是200给用户一个友好提示 Toast可不可以更新
Message msg = new Message();
msg.what = REQUESTFAIL;
handler.sendMessage(msg);
}
}catch (Exception e) {
e.printStackTrace();
//当程序出异常 也给用户一个友好提示
Message msg = new Message();
msg.what = REQUESTEXCEPTION;
handler.sendMessage(msg);
}
}
}.start();
}
}
StreamUtils是用来处理输入流和输出流的工具类。在我别的文章里有。不会的自己写也没关系。
要访问网站必须联网要加权限
<uses-permission android:name="android.permission.INTERNET"/>