Android(twenty-two)

一、标准的java接口(java.NET)
HttpURLConnection
HttpURLconnection是基于http协议的,支持get,post,put,delete等各种请求方式,最常用的就是get和post。

二、Apache接口(org.apache.http)
HttpClient

private String getUrl = "网址/login.shtml?loginName=xxx&password=xxx";
private String headUrl = "网址/login.shtml";
private final BasicCookieStore cookieStore = new BasicCookieStore();
private HttpResponse getResp;
private HttpResponse postResp;
private HttpClient mHttpClient;

public MyHttpClient( ) {
    new Thread(new Runnable() {//get请求数据
        @Override
        public void run( ) {
            mHttpClient = new DefaultHttpClient();
            // 保持和服务器登录状态一直是登录着的,必不可少设置全局唯一的Cookie(不了解这步的意图,加不加都可get数据)
            ((AbstractHttpClient) mHttpClient).setCookieStore(cookieStore);
            HttpGet httpGet = new HttpGet(getUrl);
            httpGet.addHeader("contentType","application/json");
            try {
                getResp = mHttpClient.execute(httpGet);
                if (getResp.getStatusLine().getStatusCode() == 200) {
                    String result = EntityUtils.toString(getResp.getEntity());
                    Log.i(TAG,"get请求结果: " + result);
                } else {
                    Log.i(TAG,"get请求结果: error");
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }).start();

    new Thread(new Runnable() {//post请求数据
        @Override
        public void run( ) {
            mHttpClient = new DefaultHttpClient();
            // 保持和服务器登录状态一直是登录着的,必不可少设置全局唯一的Cookie
            ((AbstractHttpClient) mHttpClient).setCookieStore(cookieStore);
            HttpPost httpPost = new HttpPost(getUrl);
            httpPost.addHeader("contentType","application/json");
            try {
                postResp = mHttpClient.execute(httpPost);
                if (postResp.getStatusLine().getStatusCode() == 200) {
                    String result = EntityUtils.toString(postResp.getEntity());
                    Log.i(TAG,"post请求结果: " + result);
                } else {
                    Log.i(TAG,"post请求结果: error");
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }).start();

    new Thread(new Runnable() {//post请求数据
        @Override
        public void run( ) {

            //创建客户端对象
            mHttpClient = new DefaultHttpClient();
            //创建post请求对象
            HttpPost httpPost = new HttpPost(headUrl);

            //封装form表单提交的数据
            BasicNameValuePair basicNameValuePair1 = new BasicNameValuePair("loginName","xxx");
            BasicNameValuePair basicNameValuePair2 = new BasicNameValuePair("password","xxx");
            List<BasicNameValuePair> parameters = new ArrayList<>();
            //把BasicNameValuePair放入集合中
            parameters.add(basicNameValuePair1);
            parameters.add(basicNameValuePair2);

            try {
                //要提交的数据都已经在集合中了,把集合传给实体对象
                UrlEncodedFormEntity entity = new UrlEncodedFormEntity(parameters,"utf-8");
                //设置post请求对象的实体,其实就是把要提交的数据封装至post请求的输出流中
                httpPost.setEntity(entity);
                //3.使用客户端发送post请求
                postResp = mHttpClient.execute(httpPost);
                if (postResp.getStatusLine().getStatusCode() == 200) {
                    InputStream result = postResp.getEntity().getContent();
                    Log.i(TAG,"post请求结果: " + getTextFromStream(result));
                } else {
                    Log.i(TAG,"post请求结果: error");
                }
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
    }).start()
  }

/**
 * 字节流转换为字符串
 * @param result
 * @return
 */
private String getTextFromStream(InputStream result) {

    byte[] b = new byte[1024];
    int len = 0;
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    try {
        while ((len = result.read(b)) != -1) {
            bos.write(b,0,len);
        }
        String text = new String(bos.toByteArray());
        bos.close();
        return text;
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return null;
}

以上是HttpClient的get和post请求数据,简单的三种数据请求,得到的结果相同,在httpClient中post和get请求数据除了HttpPost 和httpGet的对象不同,其余的没有什么差异,不过也能实现上图中get和post的区别表中的特性。

三、Android.net网络接口
就是一个api接口,android自带的接口,常常使用此包下的类进行Android特有的网络编程,如:访问WiFi,访问Android联网信息,邮件等功能。

 private Context mContext;
 AndroidNet(Context context) {
    this.mContext = context;

}

/**
 *     确定您是否连入了互联网
 *     如果您未连入互联网,则无需安排基于互联网资源的更新。 下面这段代码展示了如何利用 ConnectivityManager 查询活动网络并确定其是否连入了互联网。
 * @return true 已连接
 */
private boolean IsNoConnected( ) {
    ConnectivityManager cm =
            (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting();
    //是否是wifi
    //boolean isWiFi = activeNetwork.getType() == ConnectivityManager.TYPE_WIFI;
    return isConnected;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值