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

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

相关推荐

    基于Android Volley的网络请求工具

    Android Volley 是Google推出的一款高效的网络请求库,专为Android应用设计,旨在简化网络通信并优化性能。Volley提供了异步请求处理、缓存策略、线程管理以及强大的错误处理机制,使得开发者能够更加便捷地进行网络...

    Android网络请求框架

    在Android应用开发中,网络请求是必不可少的一部分,用于与服务器进行数据交互,如获取或发送用户数据、更新应用内容等。本篇文章将详细介绍几个常用的Android网络请求框架:OkHttp、Volley、HttpClient以及XUtils。...

    android 网络请求封装

    在Android开发中,网络请求是应用与服务器交互的基础,它涉及到数据的获取、发送和处理。为了提高代码的可复用性和可维护性,通常会将网络请求进行封装,以便在多个地方方便地调用。以下是一些关于“Android网络请求...

    Android Studio发起POST网络请求

    在Android应用开发中,发起POST网络请求是与服务器交互的重要环节。Android Studio作为官方推荐的集成开发环境(IDE),提供了丰富的工具和库来简化这一过程。本文将详细讲解如何在Android Studio中使用Java语言和...

    Android高级应用源码-自定义列表选择Dialog,适用网络请求数据.zip

    在Android开发中,自定义对话框(Dialog)是一种常见的用户交互方式,特别是在处理用户需要做出选择的情景。...通过深入学习和分析这份代码,开发者可以提升在Android应用中构建复杂交互界面的能力。

    Android网络请求视频源码

    这些源代码旨在帮助开发者深入理解Android应用中的网络通信技术,包括不同类型的HTTP请求(GET与POST)、异步加载图片以及在WebView中加载网页等内容。以下是对每个文件名称涉及知识点的详细解释: 1. **Android之...

    网络请求工具类

    在Android应用开发中,网络请求是必不可少的一部分,用于与服务器进行数据交互,获取或发送信息。本篇将详细解析"网络请求工具类"所涵盖的知识点,包括原生的HttpClient、HttpUrlConnection、Xutils以及Volley框架的...

    android中网络请求库volley.jar和asnychttp.jar

    在Android应用开发中,网络请求是必不可少的一部分,用于获取服务器上的数据或发送用户的数据到服务器。本篇文章将详细探讨两个常用的网络请求库:Volley和AsyncHttp,它们都是Android开发者们常常选择的工具。 ...

    Android网络请求

    在Android应用开发中,网络请求是必不可少的一部分,它使得应用程序能够获取远程服务器的数据,实现与互联网的交互。本文将深入探讨Android中常见的网络请求方式,包括HTTPClient、HttpURLConnection和Socket,以及...

    android okhttp网络请求框架

    OkHttp 是由 Square 公司开发的一个高效的网络请求库,广泛应用于 Android 开发中。它以其强大的性能、简单易用的 API 和丰富的特性,深受开发者喜爱。OkHttp 的核心设计理念是通过减少网络交互的延迟,优化连接和...

    Android 基于协程OkHttp网络请求工具.zip

    OkHttp是一款高效且流行的网络库,它提供了异步和同步的HTTP请求方式,而协程(Coroutines)是Kotlin为解决Android应用程序中的多线程问题引入的一种轻量级线程管理机制。本项目“Android 基于协程OkHttp网络请求...

    Android29的网络状态获取工具,NetworkTools-master.zip

    在Android开发中,网络状态的获取是至关重要的,它涉及到应用程序能否正常地访问网络资源,如下载数据、发送请求或实时...通过理解并使用NetworkTools-master中的组件,我们可以创建更加健壮和用户友好的Android应用。

    android网络开发与应用实战详解源码

    2. JSON解析:Android应用程序经常需要与服务器交换JSON格式的数据。书中介绍了使用Gson和Jackson库进行JSON序列化和反序列化的技巧,以及如何手动解析JSON对象和数组。 3. 网络状态管理:Android设备的网络环境...

    Android-一个retrofit2.0okHttp3rxjava的网络请求工具类

    这个名为 "Android-一个retrofit2.0okHttp3rxjava的网络请求工具类" 的项目,就是将这三个组件进行了封装,以方便开发者直接使用。 首先,我们来详细了解一下这三个库: 1. **Retrofit2.0**:这是一个由Square公司...

    Android-Android应用初始化工具

    "Android应用初始化工具"就是专为优化这一过程而设计的。这个工具旨在帮助开发者更有效地管理应用的启动阶段,确保各种依赖和服务在正确的时间以最优化的方式被加载。 在Android应用中,初始化通常涉及以下环节: ...

    Android动态请求权限工具类

    总的来说,"Android动态请求权限工具类"是应对Android运行时权限模型的一种有效策略,它使得应用在遵循最佳实践的同时,能够更友好地与用户交互,提升用户体验。开发者应当充分利用这样的工具,确保应用在请求权限时...

    android 网络请求架构

    3. 异步处理:Android应用通常在子线程中进行网络请求,避免阻塞主线程。 4. 数据解析:接收到服务器响应后,解析JSON或其他格式的数据。 5. 数据处理:将解析后的数据保存到本地或直接用于UI展示。 6. 错误处理:...

    android应用程序安装工具

    然而,有时我们需要手动安装未在市场发布的APK,或者在没有网络连接的情况下安装应用,这时Android应用程序安装工具就显得非常实用。它提供了一个图形化的界面,使得非技术人员也能简单、快速地完成APK的安装过程,...

    android网络请求,解析框架

    在Android开发中,网络请求和数据解析是两个关键的环节,它们构成了应用程序与服务器交互的基础。本主题将深入探讨Android中的网络请求框架和解析技术,帮助开发者理解和掌握这些核心技术。 一、网络请求框架 1. *...

    Android异步请求网络图片demo

    在Android应用开发中,异步网络请求是必不可少的一部分,特别是在加载网络图片时。"Android异步请求网络图片demo"是一个示例项目,旨在演示如何在Android应用中有效地、非阻塞地下载并显示网络上的图片。这个项目的...

Global site tag (gtag.js) - Google Analytics