前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[Android基础]Android中使用HttpURLConnection

[Android基础]Android中使用HttpURLConnection

原创
作者头像
易寒
发布2022-01-08 20:22:25
9050
发布2022-01-08 20:22:25
举报
文章被收录于专栏:Android知识Android知识

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

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

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

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

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

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

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

1、创建一个WebView

代码语言:txt
复制
<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

代码语言:txt
复制
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、创建一个子线程

代码语言:txt
复制
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

代码语言:txt
复制
<ImageView 
        android:id="@+id/imageView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

2、MainActivity.java

代码语言:txt
复制
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、创建一个子线程

代码语言:txt
复制
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”

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com