HttpURLConnection使用

一、以下是以加载网站页面为例子:

1、new一个URL的对象去关联一条链接
2、根据URL的对象去open一个HttpURLConnection
3、set HttpURLConnection的require请求方法:(必要时可以设置延时,setConnectTimeout)
    a、GET
    b、POST
4、new一个BufferReader用来读取请求到的信息流(信息流通过HttpURLConnection.getInputStream得到)
5、new一个StringBuffer,通过BufferReader把信息流放在StringBuffer里边
6、new一个handler,在handler.post方法中做耗时操作

二、代码展示
1、加载网站页面的例子

package com.example.administrator.httpurlconnection;
import android.os.Handler;
import android.webkit.WebView;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.lang.Runnable;
import java.net.HttpURLConnection;
import java.net.URL;
/**
 * Created by Administrator on 2016/3/17.
 */
public class HttpThread extends Thread {

    private Handler handler;
    private WebView webView;
    private String url;
    public HttpThread(String url, Handler handler, WebView webView) {
        this.handler = handler;
        this.url = url;
        this.webView = webView;
    }

    @Override
    public void run() {
        try {
            // 建立连接,设置获取信息流方法
            URL httpUrl = new URL(url);
            HttpURLConnection conn = (HttpURLConnection)httpUrl.openConnection();
            conn.setConnectTimeout(5000);
            conn.setRequestMethod("GET");

            //获取信息流
            BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            final StringBuffer sb = new StringBuffer();
            String str = null;
            while ((str = br.readLine()) != null){
                sb.append(str);
            }

            //耗时操作
            handler.post(new Runnable() {
                @Override
                public void run() {
                    // 这一句会出现乱码
//                    webView.loadData(sb.toString(),"text/html","utf-8");
                    // 一般使用下面这一句
                    webView.loadDataWithBaseURL("about:blank",sb.toString(),"text/html","utf-8",null);
                }
            });
        } catch (java.io.IOException e) {
            e.printStackTrace();
        }
    }
}

2、下载网络图片到本地并加载

package com.example.administrator.httpurlconnection;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Environment;
import android.os.Handler;
import android.widget.ImageView;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * Created by Administrator on 2016/3/17.
 */
public class HttpThread1 extends Thread {

    private Handler handler;
    private ImageView imageView;
    private String url;
    public HttpThread1(String url, Handler handler, ImageView imageView) {
        this.handler = handler;
        this.url = url;
        this.imageView = imageView;
    }

    @Override
    public void run() {
        try {
            // 建立连接,设置获取信息流的方法
            URL httpUrl = new URL(url);
            HttpURLConnection conn = (HttpURLConnection)httpUrl.openConnection();
            conn.setConnectTimeout(5000);
            conn.setRequestMethod("GET");
            conn.setDoInput(true);

            //找出并生成本地外部存储卡的地址
            FileOutputStream out = null;
            File downLoad = null;
            String fileName = String.valueOf(System.currentTimeMillis());
            if(Environment.getExternalStorageDirectory().equals(Environment.MEDIA_MOUNTED)) {
                File parent = Environment.getExternalStorageDirectory();
                downLoad = new File(parent, fileName);
                out = new FileOutputStream(downLoad);
            }

            //获取信息流
            int len ;
            byte []by = new byte[2 * 1024];
            InputStream in = conn.getInputStream();
            if(out != null){
                while ((len = in.read(by)) != -1) {
                    out.write(by, 0, len);
                }
            }

            //耗时操作
            final Bitmap bitmap = BitmapFactory.decodeFile(downLoad.getAbsolutePath(), null);
            handler.post(new Runnable() {
                @Override
                public void run() {
                    imageView.setImageBitmap(bitmap);
                }
            });

        } catch (java.io.IOException e) {
            e.printStackTrace();
        }
    }
}

3、发送信息到服务器并获得回应

package com.example.administrator.httpurlconnection;
import android.util.Log;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
import java.net.URLEncoder;

/**
 * Created by Administrator on 2016/3/17.
 */
public class HttpThread3 extends Thread {

    private String url;
    private String name , age;
    public HttpThread3(String url, String name, String age) {
        this.url = url;
        this.name = name;
        this.age = age;
    }

    public void doPost() {
        URL httpUrl = null;
        try {
            //建立连接,设置获取信息流的方法
            httpUrl = new URL(url);
            HttpURLConnection conn = (HttpURLConnection)httpUrl.openConnection();
            conn.setRequestMethod("POST");
            conn.setReadTimeout(5000);
            conn.setDoOutput(true);

            //获取信息流
            OutputStream out = conn.getOutputStream();
            String content = "name=" + URLEncoder.encode(name,"utf-8") + "&age=" + URLEncoder.encode(age,"utf-8");
            out.write(content.getBytes());
            BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            final StringBuffer sb = new StringBuffer();
            String str = null;
            while ((str = br.readLine()) != null){
                sb.append(str);
            }
            System.out.print(sb.toString());
            Log.i("ffffffffff", sb.toString());
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (ProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //因为不是ui耗时操作所以不用handler
    @Override
    public void run() {
        doPost();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值