android 应用的网络请求工具

标签: android 应用 网络 | 发表时间:2015-08-22 06:47 | 作者:
出处:http://www.iteye.com

       Android应用开发中一般会用到访问网络请求,可以使用socket,webservice等。这里我只是用java中URL,传送数据方式采用json,不考虑数据加密问题。封装的工具类很简单,只提供post,get方法。由于androidUI主线程中不允许启动线程,这里使用FutrueTask启动线程获得返回结果。代码如下:

public class HttpUtil {

    /**
     * get方式访问服务器
     * @param url
     * @param params
     * @return
     * @throws Exception
     */
    public static String get(final String url, final Map<String, Object> params)throws Exception{
        String r = null;
        FutureTask<String> task = new FutureTask<String>(new Callable<String>() {
            @Override
            public String call() throws Exception {
                BufferedReader bufferedReader = null;
                String result = null;
                try {
                    String getUrl = url + "?" + getParams(params);
                    Log.i("ApplicationTest", getUrl);
                    URL realUrl = new URL(getUrl);
                    URLConnection connection = realUrl.openConnection();
                    connection.connect();
                    bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                    String line = null;
                    StringBuffer sb = new StringBuffer();
                    while((line = bufferedReader.readLine())!=null){
                        sb.append(line);
                    }
                    result = sb.toString();
                } catch (IOException e) {
                    Log.i("ApplicationTest", "xxxxx1");
                    e.printStackTrace();
                    throw e;
                }finally {
                    if(bufferedReader != null){
                        try {
                            bufferedReader.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
                return result;
            }
        });
        new Thread(task).start();

        try {
            r = task.get();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
        return r;
    }

    /**
     * post方式访问服务器
     * @param url
     * @param params
     * @return
     * @throws Exception
     */
    public static String post(final String url, final Map<String, Object> params)throws Exception{
        String r = null;
        FutureTask<String> task = new FutureTask<String>(new Callable<String>() {
            @Override
            public String call() throws Exception {
                String result = null;
                BufferedReader bufferedReader = null;
                PrintWriter out = null;
                try {
                    String getUrl = url;
                    URL realUrl = new URL(getUrl);
                    URLConnection connection = realUrl.openConnection();
                    connection.setDoOutput(true);
                    connection.setDoInput(true);
                    out = new PrintWriter(connection.getOutputStream());
                    out.print(getParams(params));
                    out.flush();
                    bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                    String line = null;
                    StringBuffer sb = new StringBuffer();
                    while((line = bufferedReader.readLine())!=null){
                        sb.append(line);
                    }
                    result = sb.toString();
                } catch (IOException e) {
                    e.printStackTrace();
                    throw e;
                }finally {
                    if(bufferedReader != null){
                        try {
                            bufferedReader.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }

                return result;
            }
        });

        new Thread(task).start();
        try {
            r = task.get();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
        return r;
    }

    /**
     * 组装请求参数
     * @param params
     * @return
     */
    private static String getParams(Map<String, Object> params){
        StringBuffer sb = new StringBuffer();
        if(params != null){
            for(String key : params.keySet()){
                sb.append(key).append("=").append(params.get(key).toString()).append("&");
            }
            if(sb.indexOf("&") == sb.length()-1){
                sb.deleteCharAt(sb.length()-1);
            }
        }
        return sb.toString();
    }

}

 如果使用HttpClient工具包,代码会更简单。这里就不列出。



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [android 应用 网络] 推荐:

android 应用的网络请求工具

- - ITeye博客
       Android应用开发中一般会用到访问网络请求,可以使用socket,webservice等. 这里我只是用java中URL,传送数据方式采用json,不考虑数据加密问题. 封装的工具类很简单,只提供post,get方法. 由于androidUI主线程中不允许启动线程,这里使用FutrueTask启动线程获得返回结果.

七款免费Android网络电台应用

- kobe - Solidot
Cam Davies 写道 "网络电台是通过互联网提供的音频服务,提供个性化的在线音乐播放,多用于帮助促进唱片销售. 网络电台有两类,一种是传统FM和AM广播网络版;一种是专业或业余的网络电台,可通过SHOUTcast和Icecast等软件收听,其中SHOUTcast收录了全世界大约2.5万个网络电台.

GetEd2k (Android应用)

- 某牢 - eMule Fans 电骡爱好者
GetEd2k是一个Android应用程序,作者是anacletus. 此应用可以帮助你把网页中的电驴(eDonkey) 链接添加到你个人电脑的电驴客户端里,不过前提是你的客户端开启了用于远程控制的Web interface(Web服务器,网页接口,Web界面),当然,eMule(电骡), MLDonkey 和 aMule 都支持该功能,所以这三种主流电驴客户端的用户都可以使用GetEd2k.

android执行网络操作

- - ITeye博客
本篇我们会介绍连接到网络中涉及的基本任务,监测的网络连接(包括连接更改),并给予用户控制应用程序的网络使用情况. 还介绍了如何解析和使用XML数据. 这个类包含一个示例应用程序来说明如何执行常见的网络操作. 您可以下载示例(在右边),并用它作为自己的应用程序源代码的可重用代码. 在mainfest中声明权限,代码如下:.

Android之网络通信

- - 博客园_首页
由于一个项目的需要,我研究了一下android的网络通信方式,大体和java平台的很相似. android平台也提供了很多的API供开发者使用,请按示例图:. 首先,介绍一下通过http包工具进行通信,分get和post两种方式,两者的区别是:. 1,post请求发送数据到服务器端,而且数据放在html header中一起发送到服务器url,数据对用户不可见,get请求是把参数值加到url的队列中,这在一定程度上,体现出post的安全性要比get高.

Android 应用程序

- - CSDN博客推荐文章
Android 应用程序由四个模块构造而成:Activity、Intent 、Content Provider 、Service. 下面简单介绍一下如下模块的含义:. 1、Activity  "活动". 一个Activity就是单独的屏幕,每一个活动都被实现为一个独立的类,并且从活动基类中继承而来,活动类将会显示由视图控件组成的用户接口并对事件作出响应.

android应用框架

- - CSDN博客移动开发推荐文章
原文地址:http://developer.android.com/guide/components/fundamentals.html. android应用程序一旦装进设备,每个程序会在它自己安全的沙盒里运行. 1.android操作系统是一个多用户linux系统,每一个应用程序是一个用户. 2.默认情况下,系统会为每个app分配唯一的linux用户id(这个id只会被系统使用,并且只会被这个app知道),系统为每个app的所有文件都设置了权限,只有被分配了这个app用户ID的程序可以访问它.

Android 应用界面设计

- - 互联网的那点事...
与 iOS 相比,Android 系统界面存在各种不协调,应用界面本身缺乏统一的规范. 虽然 Android 的开放性为应用的自主发挥带来了最大的可能性,但如果系统本身能够提供标准的范例,也未必是一件坏事,毕竟许多应用并不一定需要独创的界面. 从 Android 4.0 开始,系统界面在一致性上有了许多改善,那么 Android 应用的界面应该如何设计.

Android应用性能 分析

- - CSDN博客推荐文章
  其实主要是内存方面,内存管理是个永恒的话题. 1.从工具DDMS中,在Sysinfo的tab栏里面有一个Memory usage的选项,通过USB连接Android设备以后很容易抓到图. 在图中可以看到系统随时可以用的内存是Free和Buffers两项,因为我抓图的系统只有128M的内存,所以看上去这部分可用内存已经很少了.