.Net程序员安卓学习之路4:使用xutils Get Post数据

简介: 原文:.Net程序员安卓学习之路4:使用xutils Get Post数据前面使用了一些网络上找来的类进行网络访问,后来发现了安卓开发中有一个国人写的类库xutils比较全面,也比较经典,故后续使用xutils类库进行记录。
原文: .Net程序员安卓学习之路4:使用xutils Get Post数据

前面使用了一些网络上找来的类进行网络访问,后来发现了安卓开发中有一个国人写的类库xutils比较全面,也比较经典,故后续使用xutils类库进行记录。

本例服务端使用WCF来实现,写好的WCF服务端在:http://www.cnblogs.com/madyina/p/3454741.html 下载部署即可

该服务说明如下:

image

这4个公开方法均返回一个User对象,其中最后一个还接收一个User对象。

下面我们就分别请求这4个资源。

第一步:实现界面

使用相对布局,放置2个按钮,分别为【Get Test】和【Post Test】。

image

布局代码如:

 

       <Button 
        android:id="@+id/btn_get"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:text="Get Test"
        android:onClick="btn_getTest"
        />
    
        <Button 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:layout_toRightOf="@+id/btn_get"
        android:text="Post Test"
        android:onClick="btn_postTest"
        />

 

第二步:引入第三方Jar包:

分别在下面地址下载xutils包和FastJson包:

https://github.com/wyouflf/xUtils/blob/master/xUtils-2.6.14.jar
http://repo1.maven.org/maven2/com/alibaba/fastjson/

复制到eclipse中。

不过这个FastJson包真心有点太大了,希望能够精简一些。

然后加入网络访问权限:

<uses-permission android:name="android.permission.INTERNET"/>

在bin\AndroidManifest.xml中

第三步:实现网络GET方式访问

服务中第一个方法如:

        [OperationContract]
        [WebInvoke(UriTemplate = "GetPerson", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, Method = "GET")]
        public User GetUser()
        {
            return new User { Age = "12", ID = "001", Name = "zhangsan" };
        }

所以使用

http://192.168.1.6/UserService.svc/GetPerson 来进行访问,如果访问成功,服务会返回一个Json串

image

我们要做的就是将返回的Json串反序列化成对象,再访问对象的属性。

Xutils为我们封装并优化了Android网络访问,所以现在写访问代码较为轻松:

    public void btn_getTest(View v)
    {
        HttpUtils http = new HttpUtils();
        String url = "http://192.168.1.6/UserService.svc/GetPerson"; 
        RequestParams params = new RequestParams(); 
        http.send(HttpMethod.GET, url, params, new RequestCallBack<String>() { 

        @Override 
        public void onSuccess(ResponseInfo<String> responseInfo) { 
        User userInfo=JSON.parseObject(responseInfo.result,User.class); 
        Toast.makeText(getApplicationContext(), "请求结果:" + userInfo.getName(), Toast.LENGTH_SHORT).show(); 
        } 


        @Override 
        public void onFailure(HttpException error, String msg) { 
        Toast.makeText(getApplicationContext(), "访问失败" + msg, Toast.LENGTH_SHORT).show(); 
        } 

        });
    }

发送到虚拟机运行效果如:

image

Get方式若要加参数只需加在Url中即可,所以第二个方法不再举例。

第四步:实现网络POST方式访问

POST方式无参情况较少,我们直接来看有BODY的情况。实现思路是将本地对象序列化成JSON串,POST给服务,将返回的数据再次反序列化,如上例show出对象的属性。

服务方法如:

        [OperationContract]
        [WebInvoke(UriTemplate = "GetPersonPostById", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, Method = "POST")]
        public User GetUserPostById(User u)
        {
            return new User { Age = "15", ID = "005", Name = "laoliu" };
        }

本次不同的是由于传送的BODY格式是JSON格式,所以需要在POST请求中加入Content-Type,详细代码如下:

    public void btn_postTest(View v)
    {
        HttpUtils http = new HttpUtils();
        String url = "http://192.168.1.6/UserService.svc/GetPersonPostById"; 
        RequestParams params = new RequestParams(); 
        /* //添加请求参数 
        params.addBodyParameter(key, value);*/ 

        params.addHeader("Content-Type", "application/json");

        User user=new User();
        user.setName("mady");
        user.setAge("1");
        user.setID("123");


        String jsonStr=JSON.toJSONString(user); 
        try {
        params.setBodyEntity(new StringEntity(jsonStr));

        } catch (UnsupportedEncodingException e) {
        }
        http.send(HttpMethod.POST, url, params, new RequestCallBack<String>() { 


        @Override 
        public void onSuccess(ResponseInfo<String> responseInfo) { 
            User userInfo=JSON.parseObject(responseInfo.result,User.class); 
            Toast.makeText(getApplicationContext(), "请求结果:" + userInfo.getName(), Toast.LENGTH_SHORT).show(); 
        } 


        @Override 
        public void onFailure(HttpException error, String msg) { 
        Toast.makeText(getApplicationContext(), "访问失败" + error.fillInStackTrace(), Toast.LENGTH_SHORT).show(); 
        } 

        }); 
    }

发送到虚拟机运行效果如:

image

如此我们就完成了使用xutils简化网络访问。

目录
相关文章
学习计算机组成原理(王道考研)------第十一天https://zhengyz.blog.csdn.net/article/details/121706379?spm=1001.2014.3001.5502
这篇文章是关于计算机组成原理的王道考研学习笔记,主要介绍了半导体存储器RAM和ROM的相关知识。
学习计算机组成原理(王道考研)------第十一天https://zhengyz.blog.csdn.net/article/details/121706379?spm=1001.2014.3001.5502
|
15天前
|
API
【Azure Key Vault】.NET 代码如何访问中国区的Key Vault中的机密信息(Get/Set Secret)
【Azure Key Vault】.NET 代码如何访问中国区的Key Vault中的机密信息(Get/Set Secret)
|
25天前
|
开发框架 .NET 数据库连接
闲话 Asp.Net Core 数据校验(三)EF Core 集成 FluentValidation 校验数据例子
闲话 Asp.Net Core 数据校验(三)EF Core 集成 FluentValidation 校验数据例子
|
1月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【文献学习】Phase-Aware Speech Enhancement with Deep Complex U-Net
文章介绍了Deep Complex U-Net模型,用于复数值的语音增强,提出了新的极坐标掩码方法和wSDR损失函数,并通过多种评估指标验证了其性能。
26 1
|
2月前
|
开发框架 JSON 前端开发
利用查询条件对象,在Asp.net Web API中实现对业务数据的分页查询处理
利用查询条件对象,在Asp.net Web API中实现对业务数据的分页查询处理
|
25天前
|
开发框架 前端开发 算法
分享 .NET EF6 查询并返回树形结构数据的 2 个思路和具体实现方法
分享 .NET EF6 查询并返回树形结构数据的 2 个思路和具体实现方法
|
25天前
|
开发框架 前端开发 .NET
Asp.net Webapi 的 Post 方法不能把参数加到 URL 中?试试这样写
Asp.net Webapi 的 Post 方法不能把参数加到 URL 中?试试这样写
|
29天前
|
开发框架 .NET API
C#/.NET/.NET Core推荐学习书籍(24年8月更新)
C#/.NET/.NET Core推荐学习书籍(24年8月更新)
|
5天前
|
存储 Android开发 开发者
探索安卓开发之旅:从新手到专家的必经之路
【9月更文挑战第3天】在这篇文章中,我们将踏上一场激动人心的旅程,深入探索安卓开发的广阔天地。无论你是初涉编程世界的新手,还是期望提升技能的开发者,这里都有你需要的知识与技巧。我们将从基础概念讲起,逐步引导你了解安卓应用的核心组件,并分享实用的开发建议。准备好了吗?让我们一起开启这段成长之旅吧!
Android--httpclient模拟post请求和get请求
版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/chaoyu168/article/details/50964727 HttpClient的使用模式: 1.
935 0
下一篇
DDNS