发送网络请求
首先任何网络操作,都不能在主线程中启动,只能在子线程里使用,这就考验使用Handler消息传送机制对主线程的ui进行操作
1.获取到网络操作限权
<uses-permission android:name="android.permission.INTERNET" />
2.创建一个子线程进行网络操作
tijiao.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
path = edit.getText().toString().trim();
Toast.makeText(http.this,path,Toast.LENGTH_SHORT).show();
final Message mess=new Message();
mess.what=444;
handler.sendMessage(mess);
new Thread(new Runnable() {
private InputStream inputStream;
private int code;
private HttpURLConnection conn;
@Override
public void run() {
try {
URL url=new URL(path);
conn = (HttpURLConnection) url.openConnection();//io
conn.setRequestMethod("GET");//io
conn.setConnectTimeout(5000);//5000的延迟
// int code= conn.getResponseCode();//io
code= conn.getResponseCode();//获取返回值
if(code==200)//200就是返回成功
{
inputStream = conn.getInputStream();
bitmap = BitmapFactory.decodeStream(inputStream);//此时返回的就是图片了
Message message22 = new Message();
message22.what=CHANE;//这是个常量哈
message22.obj=bitmap;
handler.sendMessage(message22);
}
} catch (IOException e) {
Message message2=new Message();
message2.what=11;
message2.obj=code;
handler.sendMessage(message2);
e.printStackTrace();
}
conn.disconnect();
}
}).start();
}
});
进行整体解析一下。
通过URL对象获取到HttpURLConnection对象,这样就可以进行网络发送了;设置方式为get,然后就取返回值200就是成功;通过input输入流,接收返回的数据,可以看出是一个图片,于是我们就用Bitmap接收,Message对象设置一下obj为bitmap,然后传出去,让Handler处理,就完事了。