java---网络请求

1,使用URLDecoder和URLEncoder
URLDecoder类(编码):用于将把一些乱码的特殊的字符转化成普通的字符串。——方法:decoder(String s,String enc)静态方法
URLEncoder类(译码):用于把普通的字符串转化成特殊的字符。—-方法:encoder(String s,String enc)

    String data = "";
                if (params != null) {
                    for (Entry<String, String> i : params.entrySet()) {
                        try {
                            data += "&"
                                    + URLEncoder.encode(i.getKey(), "UTF-8")
                                    + "="
                                    + URLEncoder.encode(i.getValue(), "UTF-8");
                        } catch (UnsupportedEncodingException e) {
                            e.printStackTrace();
                        }
                    }

2,使用URL和URLConnection
URL对象代表的是统一资源定位器,它是指向互联网“资源”的指针
URL类的一堆方法:
String getFile():获取该URL的资源名。
String getHost():获取该URL的主机名。
String getPaht():获取该URL的路径部分。
int getPort():获取端口号
URLConnection openConnection();返回一个URLConnection对象,它代表了与URL所引用的远程对象的链接。
InputStream getInputStream();打开与此URL的链接,返回一个URL资源的inputstream,通过该方法可以很方便的读取远程的资源—-甚至是实现多线程下载。

3,URLConnection:表示应用程序和URL之间的通信链接
HttpURLConnection:表示应用程序和URL之间的http链接
(1)通过URL的openConnection方法来创建URLConnection对象
(2)设置URLConnection的参数和普通请求属性
(3)如果只是发送get请求,则使用connect()方法建立和远程资源之间的实际链接即可;如果需要发送POST方式的请求,则需要获取URLConnection实例对应的输出流来发送请求参数。

get请求:
URL url=new URL(path);
URLConnection conn=url.openConnection();
conn.connect();
格式:将请求的参数放在URL字符串之后,以?隔开。程序直接调用URLConnection对象的connect()方法即可
如果是发送POST请求,则需要设置doIn和doOut两个请求头字段的值,在使用URLConnection对应的输出流设置请求参数
响应:get和post的响应方式都一样,获取URLConnection的输入流

(4),远程资源变为可用,程序访问远程资源的头字段或输入流读取远程资源。
URLConnection的一堆方法:
objec getContent();获取URLConnection的内容
Stirng getHeaerField(String name):获取指定响应头字段的值。
***getInputStream()返回URLConnection对应的输入流,用于获取URLConnection响应的内容
getOutputStream():返回URLConnection对应的输出流,用于向URLConnection发送请求参数。*

package hk.wangdao.main;

import java.io.ByteArrayOutputStream;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Map;
import java.util.Map.Entry;
import android.os.Handler;
import com.google.gson.JsonSyntaxException;

public class Internet {

    // 主线程的handler
    private Handler mHandler = new Handler();

    public interface onCallback {
        public void callback(String response);
    }

    public void connetion(final String urlStr,
            final Map<String, String> params, final onCallback callback) {
        new Thread() {
            public void run() {

                URL url = null;
                try {
                    url = new URL(urlStr);
                } catch (MalformedURLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                HttpURLConnection connetion = null;
                String data = "";
                if (params != null) {
                    for (Entry<String, String> i : params.entrySet()) {
                        try {
                            data += "&"
                                    + URLEncoder.encode(i.getKey(), "UTF-8")
                                    + "="
                                    + URLEncoder.encode(i.getValue(), "UTF-8");
                        } catch (UnsupportedEncodingException e) {
                            e.printStackTrace();
                        }
                    }
                }

                try {
                    connetion = (HttpURLConnection) url.openConnection();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                try {
                    connetion.setRequestMethod("POST");
                } catch (ProtocolException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                connetion.setReadTimeout(5000);
                connetion.setConnectTimeout(5000);
                connetion.setDoInput(true);
                connetion.setDoOutput(true);

                OutputStream output;
                try {
                    output = connetion.getOutputStream();
                    output.write(data.getBytes());
                    output.flush();
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                try {
                    if (connetion.getResponseCode() == 200) {
                        InputStream in = connetion.getInputStream();
                        ByteArrayOutputStream out = new ByteArrayOutputStream();
                        int len;
                        byte[] buffer = new byte[1024];
                        //放到字节数组buffer中去
                        while ((len = in.read(buffer)) != -1) {
                            out.write(buffer, 0, len);
                        }
                        in.close();
                        out.close();
                        final String result = new String(out.toByteArray());
                        // 这里把线程放到handler所在的线程中去
                        mHandler.post(new Runnable() {

                            @Override
                            public void run() {
                                callback.callback(result);
                            }
                        });
                    }
                } catch (JsonSyntaxException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }.start();

    }

}

Android端的网络请求:

这里主要用HttpUrlConnection这个类
网络的连接:
String spec=”xxx.xxx.xxx”;
URL url=new URL(spec);
打开连接;
HttpUrlConnection connection=(HttpUrlConnection)url.openConnection;
设置请求方式
connection.setRequestMethod(“POST”);
connection.setDoInputTime(5000);
connection.setDoOutputTime(5000);
数据的格式要求:
String data=”&name=”+URLEncoder.encode(name,”UTF-8”)+”&password=”+URLEncoder.encode(password,”UTF-8”);

获取输出流:
outputStream output=connetion.getOutputStream();
output.write(date.getBytes());
output.flush();
获取输入流:
InputStream input=connection.getInputStream();

WebView组件:一个浏览器的实现。
一些方法:void goBack();后退
void goForward();前进
void loadUrl(String url);加载指定URL对应的网页
boolean zoomIn()放大网页
boolean zoomOut()缩小网页

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值