博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Android基础]Android中使用HttpURLConnection
阅读量:2439 次
发布时间:2019-05-10

本文共 4731 字,大约阅读时间需要 15 分钟。

HttpURLConnection继承了URLConnection,因此也可以向指定网站发送GET请求、POST请求。它在URLConnetion的基础上提供了如下便捷的方法。

int getResponseCode():获取服务器的响应代码。

String getResponseMessage():获取服务器的访问信息。
String getRequestMethod():获取发送请求的方法。
void setRequestMethod(String method):设置发送请求的方法。
我们通过两个例子来体会一下:
一、将网站的内容显示在界面上:
1、创建一个WebView

2、MainActivity.java

public class MainActivity extends Activity {
private WebView webview; //通过Handler在子线程更新主界面的UI private Handler handler = new Handler(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webview = (WebView) findViewById(R.id.webView); new HttpThread("http://www.sina.com", webview, handler).start(); }}

3、创建一个子线程

public class HttpThread extends Thread {
private String url; private WebView webview; private Handler handler; //通过构造函数传三个参数 public HttpThread(String url, WebView webView, Handler handler) { this.url = url; this.webview = webView; this.handler = handler; } } @Override public void run() { try { URL httpUri = new URL(url); HttpURLConnection conn = (HttpURLConnection) httpUri.openConnection(); conn.setReadTimeout(5000); conn.setRequestMethod("GET"); final StringBuffer sb = new StringBuffer(); BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); String str; while((str = reader.readLine()) != null) { sb.append(str); } handler.post(new Runnable() { @Override public void run() { //将数据加载到webview中 webview.loadData(sb.toString(), "text/html;charset=utf-8", null); } }); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}

4、在AndroidManifest中添加权限:

android:name=”android.permission.INTERNET”

二、根据URL地址下载一张图片

1、创建一个webview

2、MainActivity.java

public class MainActivity extends Activity {
private Handler handler = new Handler(); private ImageView imageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView = (ImageView) findViewById(R.id.imageView1); new HttpThread("http://img5.duitang.com/uploads/item/201410/23/20141023211631_VKmfz.jpeg", imageView, handler).start(); }

3、创建一个子线程

public class HttpThread extends Thread {
private String url; private Handler handler; private ImageView imageView; public HttpThread(String url, ImageView imageView, Handler handler) { this.url = url; this.imageView = imageView; this.handler = handler; } @Override public void run() { try { URL httpUri = new URL(url); HttpURLConnection conn = (HttpURLConnection) httpUri.openConnection(); conn.setReadTimeout(5000); conn.setRequestMethod("GET"); //设置可以读取到输入流 conn.setDoInput(true); InputStream in = conn.getInputStream(); FileOutputStream out = null; String fileName = String.valueOf(System.currentTimeMillis()); File downloadFile = null; if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { //获得SDcard的目录文件 File parent = Environment.getExternalStorageDirectory(); downloadFile = new File(parent, fileName); out = new FileOutputStream(downloadFile); } //缓冲区 byte[] b = new byte[2 * 1024]; int len; if(out != null) { while((len = in.read(b)) != -1) { out.write(b, 0, len); } } final Bitmap bitmap = BitmapFactory.decodeFile(downloadFile.getAbsolutePath()); handler.post(new Runnable() { @Override public void run() { imageView.setImageBitmap(bitmap); } }); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }

4、在AndroidManifest中添加权限:

android:name=”android.permission.WRITE_EXTERNAL_STORAGE”

这样下载的图片就显示在界面上了。

转载地址:http://tefqb.baihongyu.com/

你可能感兴趣的文章
限制只能中文输入的方法(转)
查看>>
共享池 shared pool
查看>>
一张图搞定Java面向对象
查看>>
Borland ALM之需求定义和管理解决方案
查看>>
Verizon选择Borland控制开发流程并降低风险
查看>>
Borland 崭新的Caliber Define IT产品
查看>>
IBM Rational RequisitePro集成简介
查看>>
OOAD利器Rational Rose的介绍
查看>>
一年的测试生活和感悟
查看>>
通过RUP用例进行需求管理的可追踪性策略(2)
查看>>
持续改进之配置管理变更的关键路径
查看>>
postgresql 优化与维护
查看>>
mongodb replica sets 测试
查看>>
linux AS6.2 与 as5.4 的对比,性能提升明显
查看>>
FLASHCACHE 的是是非非
查看>>
length() between oracle and postgresql
查看>>
求无序数组总第n大的数
查看>>
99-lisp lisp 的99个问题 P1-10
查看>>
PG 函数的易变性(Function Volatility Categories)
查看>>
Lisp Quote 和Backquote分析
查看>>