Android基础之HttpUrlConnection小案例
2015-07-23 22:01
615 查看
URLConnection的子类HttpURLConnection被广泛用于Android网络客户端编程,它与apache HttpClient是两种主要的客户端实现方式,google官方推荐使用HttpURLConnection.
URLConnection是个抽象类,它有两个直接子类分别是HttpURLConnection和JarURLConnection。另外一个重要的类是URL,通常URL可以通过传给构造器一个String类型的参数来生成一个指向特定地址的URL实例。
URL请求的类别:
分为二类,GET与POST请求。二者的区别在于:
这个案例就简单演示一下打开网页,以及下载图片
效果图:
获取网页:
下载图片:
Activity的代码:
URLConnection是个抽象类,它有两个直接子类分别是HttpURLConnection和JarURLConnection。另外一个重要的类是URL,通常URL可以通过传给构造器一个String类型的参数来生成一个指向特定地址的URL实例。
URL请求的类别:
分为二类,GET与POST请求。二者的区别在于:
a. get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给servlet, b. post与get的不同之处在于post的参数不是放在URL字串里面,而是放在http请求的正文内。
这个案例就简单演示一下打开网页,以及下载图片
效果图:
获取网页:
public class HttpThreadPic extends Thread { private String url; private WebView myWebView; private Handler myHandler; @Override public void run() { try { URL httpUrl=new URL(url); try { //创建一个HttpURLConnection对象或HttpsURLConnection对象 HttpURLConnection connection=(HttpURLConnection) httpUrl.openConnection(); //设置网络请求超时时间 connection.setReadTimeout(5000); //设置请求方式 connection.setRequestMethod("GET"); final StringBuffer buffer=new StringBuffer(); //获取网页信息 BufferedReader reader=new BufferedReader(new InputStreamReader(connection.getInputStream())); String str; //将信息存入缓冲区 while((str=reader.readLine())!=null){ buffer.append(str); System.out.println(str); } //将网页信息加载到WebView; myHandler.post(new Runnable() { @Override public void run() { myWebView.loadData(buffer.toString(), "text/html;charset=utf-8", null); } }); } catch (IOException e) { System.out.println("1"); e.printStackTrace(); } } catch (MalformedURLException e) { System.out.println("2"); e.printStackTrace(); } } //初始化 public HttpThreadPic(String url, WebView myWebView, Handler myHandler) { super(); this.url = url; this.myWebView = myWebView; this.myHandler = myHandler; } }
下载图片:
public class HttpThread extends Thread { private String url; private ImageView myImageView; private Handler myHandler; private File picfile; @Override public void run() { try { URL httpUrl=new URL(url); try { //创建一个HttpURLConnection对象或HttpsURLConnection对象 HttpURLConnection connection=(HttpURLConnection) httpUrl.openConnection(); //设置网络请求超时时间 connection.setReadTimeout(5000); //设置请求方式 connection.setRequestMethod("GET"); //设置是否从httpUrlConnection读入,默认情况下是true; connection.setDoInput(true); InputStream stream=connection.getInputStream(); FileOutputStream outputStream = null; String filename=String.valueOf(System.currentTimeMillis()); //判断SD卡是否存在 if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { //获得SDK的一个目录 File parent=Environment.getExternalStorageDirectory(); picfile=new File(parent, filename); outputStream=new FileOutputStream(picfile); } byte[] bs=new byte[2*1024]; int len; if (outputStream!=null) { while((len=stream.read(bs))!=-1){ outputStream.write(bs, 0, len); } } final Bitmap bitmap=BitmapFactory.decodeFile(picfile.getAbsolutePath()); myHandler.post(new Runnable() { @Override public void run() { myImageView.setImageBitmap(bitmap); } }); } catch (IOException e) { System.out.println("1"); e.printStackTrace(); } } catch (MalformedURLException e) { System.out.println("2"); e.printStackTrace(); } } public HttpThread(String url, ImageView myImageView, Handler myHandler) { super(); this.url = url; this.myImageView = myImageView; this.myHandler = myHandler; } }
Activity的代码:
public class MainActivity extends ActionBarActivity implements OnClickListener { private Button bt_web, bt_pic; private WebView myWebview; private Handler handler = new Handler(); private ImageView myImageView; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); //传入网址 new HttpThreadPic("https://www.baidu.com/", myWebview, handler).start(); new HttpThread("http://img4.imgtn.bdimg.com/it/u=705115385,3322141037&fm=21&gp=0.jpg", myImageView, handler).start(); } private void initView() { myWebview = (WebView) findViewById(R.id.http_web); myImageView = (ImageView) findViewById(R.id.http_image); bt_pic = (Button) findViewById(R.id.http_bt_pic); bt_web = (Button) findViewById(R.id.http_bt_web); bt_pic.setOnClickListener(this); bt_web.setOnClickListener(this); } //隐藏内容,显示内容 public void onClick(View v) { switch (v.getId()) { case R.id.http_bt_web: myWebview.setVisibility(View.VISIBLE); myImageView.setVisibility(View.GONE); break; case R.id.http_bt_pic: myWebview.setVisibility(View.GONE); myImageView.setVisibility(View.VISIBLE); break; default: break; } } }
相关文章推荐
- 网络拓扑图例库
- unix网络编程源码编译问题
- Angular2 Http
- unix网络编程源码编译问题
- 网络攻击技术开篇——SQL Injection
- 网络攻击技术开篇——SQL Injection
- c#网络编程
- Linux C语言错误处理(转载)http://www.cnblogs.com/nliao/archive/2010/09/09/1822647.html
- http与https请求
- 深度神经网络DNN的多GPU数据并行框架 及其在语音识别的应用
- android中的加载网络图片
- http关闭连接
- TCP
- 网络图片抓取--web开发批量盗图!!!!!
- 云计算和大数据时代网络技术揭秘(十四)虚拟桌面
- HttpClient
- Win7和Winxp相互共享文件
- TCP的三次握手,四次挥手全过程
- SpringMVC template和HttpClient post提交
- 个人感觉:又是一年网络游戏