.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简化网络访问。

目录
相关文章
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
1398 4
|
5月前
|
人工智能 API 数据库
Semantic Kernel .NET 架构学习指南
本指南系统解析微软Semantic Kernel .NET架构,涵盖核心组件、设计模式与源码结构,结合实战路径与调试技巧,助你从入门到贡献开源,掌握AI编排开发全栈技能。
477 2
|
8月前
|
安全 数据库 Android开发
在Android开发中实现两个Intent跳转及数据交换的方法
总结上述内容,在Android开发中,Intent不仅是活动跳转的桥梁,也是两个活动之间进行数据交换的媒介。运用Intent传递数据时需注意数据类型、传输大小限制以及安全性问题的处理,以确保应用的健壯性和安全性。
529 11
|
10月前
|
存储 XML Java
Android 文件数据储存之内部储存 + 外部储存
简介:本文详细介绍了Android内部存储与外部存储的使用方法及核心原理。内部存储位于手机内存中,默认私有,适合存储SharedPreferences、SQLite数据库等重要数据,应用卸载后数据会被清除。外部存储包括公共文件和私有文件,支持SD卡或内部不可移除存储,需申请权限访问。文章通过代码示例展示了如何保存、读取、追加、删除文件以及将图片保存到系统相册的操作,帮助开发者理解存储机制并实现相关功能。
2411 2
|
Java 物联网 C#
C#/.NET/.NET Core学习路线集合,学习不迷路!
C#/.NET/.NET Core学习路线集合,学习不迷路!
617 0
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
835 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
11月前
|
网络协议 定位技术 网络安全
IPIP.NET-IP地理位置数据
IPIP.NET 是一家专注于 IP 地理位置数据的提供商,基于 BGP/ASN 数据与全球 800+ 网络监测点技术,提供高精度的 IPv4 和 IPv6 定位服务。其核心服务包括地理位置查询、详细地理信息和网络工具等,广泛应用于网络安全、广告营销、CDN 优化等领域。数据覆盖全球,支持多语言,每日更新确保实时性。IPIP.NET 提供 API 接口、离线数据库及多种语言 SDK,方便开发者集成使用。
2142 0
|
Java Maven 开发工具
第一个安卓项目 | 中国象棋demo学习
本文是作者关于其第一个安卓项目——中国象棋demo的学习记录,展示了demo的运行结果、爬坑记录以及参考资料,包括解决Android Studio和maven相关问题的方法。
281 7
第一个安卓项目 | 中国象棋demo学习
|
SQL XML 关系型数据库
入门指南:利用NHibernate简化.NET应用程序的数据访问
【10月更文挑战第13天】NHibernate是一个面向.NET的开源对象关系映射(ORM)工具,它提供了从数据库表到应用程序中的对象之间的映射。通过使用NHibernate,开发者可以专注于业务逻辑和领域模型的设计,而无需直接编写复杂的SQL语句来处理数据持久化问题。NHibernate支持多种数据库,并且具有高度的灵活性和可扩展性。
416 2