`
wangxinxin1212
  • 浏览: 29067 次
社区版块
存档分类
最新评论

android 应用的网络请求工具

阅读更多

       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
0
分享到:
评论

相关推荐

    简单的HTTP请求工具AndroidHttpTools.zip

    AndroidHttpTools 是简单的 HTTP 请求工具,支持 get,post,post 文件。 //------------------------简单示例------------------------//String url = "http://www.baidu.com/"; private void requestData()...

    Android-从android原生角度理解网络请求和异步操作

    dowanload demo 单线程下载 断点下载,简单好用的下载工具 使用原生HttpUrlConnection AsyncTask 模仿手机应用市场

    Android-app.rar

    Android应用源码使用Vitamio框架的网络在线电视直播 Android应用源码全能网络视频播放器 Android应用源码单机版电子阅读器 Android应用源码可以直接发邮件的简洁课程表项目源码 Android应用源码可以管理U盘的文件...

    通用Android工具库Common4Android.zip

    Common4Android是一个通用Android工具库,包含网络库、线程管理器、常用Util工具、热修复,它拥有良好的架构,低耦合、高内聚,使用起来非常轻松。 -基类 ClassName Description ...

    基于Android平台的天气信息查询应用

    Android SDK:作为开发环境,提供了丰富的API和工具来构建Android应用。 Java/Kotlin:作为主要编程语言,用于编写应用的逻辑和用户界面。 Material Design:作为界面设计指南,确保应用界面的一致性和现代感。 ...

    安卓手机抓包工具,查看指定APP请求及服务端返回数据

    手机端抓包工具,可以抓取指定应用的网络请求,也可以抓取手机全部请求。偶尔开发时需要查看服务端返回数据是否异常是可以使用该APP抓包

    AndroidBase android 应用开发框架.zip

    如网络下载,多线程与线程池的管理,数据库ORM,图片缓存管理,图片文件下载上传,Http请求工具,SOAP工具类,异步Task,常用工具类(字符串,日期,文件处理,图片处理工具) 开发工具在软件开发生命周期中扮演着...

    二款android应用开发框架

    如网络下载,多线程与线程池的管理,数据库ORM,图片缓存管理,图片文件下载上传,Http请求工具,SOAP工具类,异步Task,常用工具类(字符串,日期,文件处理,图片处理工具类等),能够使您的应用在团队开发中减少...

    android 完全中文版 开发应用详解

    13.2.3 使用am工具启动android应用程序 306 13.3 android应用程序示例 308 13.3.1 helloactivity程序 308 13.3.2 helloactivity的源代码结构 308 13.3.3 helloactivity的编译结构(源代码开发) 312 13.3.4 ...

    一个轻量级的AOP(Android)应用框架 囊括了最实用的AOP应用.rar

    XHttp2 一个功能强悍的网络请求库,使用RxJava2 + Retrofit2 + OKHttp组合进行封装。 除此之外,还集成了其他优秀的第三方库: butterknife 控件依赖注入框架: https://github.com/JakeWharton/butterknife ...

    【Android】 Android开发工具之Crash日志打印.zip

    提供集成开发环境(IDE),如Visual Studio、Eclipse、Android Studio和Sublime Text等,这些工具集成了文本编辑器,支持语法高亮、自动补全、代码片段管理和版本控制等功能,有助于开发者高效编写和维护代码。...

    ShadowOS:Android应用程序安全工具

    Android应用程序安全工具 测试移动应用程序的安全漏洞是一项艰巨的任务。 有许多目标领域需要分析,其中很多是手动的。 ShadowOS是一种工具,可帮助安全测试人员评估移动应用程序的漏洞。 这是一个自定义创建的...

    一本介绍如何进行安卓(Android)应用程序开发的书籍

    涵盖了安卓开发的各个方面。...网络通信:介绍如何在安卓应用程序中进行网络通信,包括HTTP请求、WebSocket、Retrofit等网络库的使用。 多媒体处理:介绍如何在安卓应用程序中处理多媒体内容,如图片、音频、

    web、Android、ios抓包工具Charles Windows64位完整版(含破解补丁)

    Charles是一款基于应用层http协议抓包的工具,借助这款工具,测试人员可以进行http/https数据抓包,包括对android和ios移动端的数据请求,以及web端的数据请求,从而验证是否满足需求。甚至,通过charles的断点功能...

    《Android系统源代码情景分析》

    1.2 Android应用程序参考书籍 1.3 下载、编译和运行Android源代码 1.3.1 下载Android源代码 1.3.2 编译Android源代码 1.3.3 运行Android模拟器 1.4 下载、编译和运行Android内核源代码 1.4.1 下载...

    星曦向荣的Android工具应用【ZH Tools】.zip

    爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL...

    Android开发-火星探测车拍摄照片展示应用实现

    在Windows操作系统上搭建开发环境,所使用的开发工具为Android Studio,使用Java语言,工具包使用JDK1.7或1.8。 1. 仿效教材第24章例子,开发展示NASA的火星探测器所拍摄照片的app 2. 利用持久化保存技术对网络...

    android系统原理及开发要点详解

     第13章“Android应用程序概述及框架”,介绍Android应用程序层的基本概念和应用程序框架,这部分内容是Android自下而上的第4个层次,可以基于源代码或者SDK开发,它们之间的差别非常小。  第14章“Android应用...

    Android ThinkAndroid开发框架.zip

    ThinkAndroid是一个免费的开源的、简易的、遵循Apache2开源协议发布的Android开发框架,其开发宗旨是简单、快速的进行 Android应用程序的开发,包含Android mvc、简易sqlite orm、ioc模块、封装Android httpclitent...

Global site tag (gtag.js) - Google Analytics