[Android基础]Android中使用HttpURLConnection

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

int getResponseCode():获取server的响应代码。

String getResponseMessage():获取server的訪问信息。

String getRequestMethod():获取发送请求的方法。

void setRequestMethod(String method):设置发送请求的方法。

我们通过两个样例来体会一下:

一、将站点的内容显示在界面上:

1、创建一个WebView

<WebView
        android:id="@+id/webView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true" />

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

<ImageView
        android:id="@+id/imageView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

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”

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

时间: 2025-01-31 15:10:56

[Android基础]Android中使用HttpURLConnection的相关文章

[Android进阶]Android性能优化

Android性能优化 合理管理内存 节制的使用Service 如果应用程序需要使用Service来执行后台任务的话,只有当任务正在执行的时候才应该让Service运行起来.当启动一个Service时,系统会倾向于将这个Service所依赖的进程进行保留,系统可以在LRUcache当中缓存的进程数量也会减少,导致切换程序的时候耗费更多性能.我们可以使用IntentService,当后台任务执行结束后会自动停止,避免了Service的内存泄漏. 当界面不可见时释放内存 当用户打开了另外一个程序,我

Android基础:代码中实现界面动态布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView

【Android基础】Android SQLite存储自定义对象

Android SQLite存储自定义对象 在SQLite数据库中可存储的数据类型有NULL.INTEGER.REAL(浮点型).TEXT.BOOL,一共是五种数据类型.在Android开发中,我们存储数据的一般的作法是数据库的属性就是类的成员变量,比如: 要存储一个人的姓名和年龄,在类中的是将它们定义为两个成员变量 class Person{ private String name; private int age; } 数据库中是将它们存储为两个字段 - name TEXT - age IN

[必藏]Android 最棒的开源集合库

下边是个人的收藏,包含国内.国外的最棒的开源集合,强烈建议收藏 Android开源项目分类汇总 | 查看 包括内容: Android开源项目第一篇--个性化控件(View)篇 包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.ProgressBar.TextView.ScrollView.TimeView.TipView.FlipView.ColorPickView.GraphView.UI Style.其他 Andro

Android基础之Android系统架构

Android采用层次化系统架构,官方公布的标准架构如下图所示.Android由底层往上分为4个主要功能层,分别是linux内核层(Linux Kernel),系统运行时库层(Libraries和Android Runtime),应用程序架构层(Application Framework)和应用程序层(Applications). Linux内核层 Android以Linux操作系统内核为基础,借助Linux内核服务实现硬件设备驱动,进程和内存管理,网络协议栈,电源管理,无线通信等核心功能.An

[Java基础]Java通配符

转自:http://peiquan.blog.51cto.com/7518552/1303768 本以为这会是一篇比较基础的博客,可一旦深究的时候,才发现很多有意思的东西,也发现了很多令人迷惑的地方.通配符是一个有趣的东西,如果你掌握了,会使你的代码更为通用(健壮性更强).首先本文是在建立在java泛型基础之上的,如果你对泛型并不了解,可以点击 这里.同时为了对通配符的了解更为透切,定义如下几个类. public class Animal { private String name; publi

[J2EE基础]初识JSP和Servlet

近期须要用到J2EE,就開始学习与J2EE相关的知识了. JSP是一种Javaserver端技术,它用于在网页上显示动态内容. Tomcat相关知识 JSP的运行过程 JSP的页面构成元素 JSP的凝视 静态和动态include JSP标准标签库 JSP的九大内置对象: Out:一个缓冲的输出流,向client输出内容 page:当前JSP页面本身,它是java.lang.Object类的实例 request:提取浏览器提交的信息 response:server对客户的请求做出响应.向clien

[Android Studio 权威教程]AS 中配置强大的版本号管理系统(Git、SVN、等)

在Eclipse中加入Git等版本号管理工具须要自己加入插件.并且个人认为不咋好用,在AS中已经给我们集成好了,我们仅仅须要配置一下就OK了.今天就和大家聊聊怎么配置以及使用的要点. 1. 安装Git/CVS 第一步首先你须要安装Git/CVS等版本号管理工具.这个请自行百度 2. 新建一个本地空仓库 新建一个仓库叫GitTest 仓库如今是空的什么都没有 找到路径,然后复制路径(这步非常重要) 3. 新建AS项目 项目创建完毕.这个时候我们能够看到AS提示我们配置仓库的提示,我们接下来配置一下

[转]Android中attrs.xml文件的使用详解

转自:http://blog.csdn.net/jiangwei0910410003/article/details/17006087 Android中在values中定义一个attrs.xml,然后自己定义一个组件MyView attrs.xml内容如下: [html] view plaincopy <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleabl