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

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

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

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

该服务说明如下:

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

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

第一步:实现界面

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

布局代码如:

 

       <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串

我们要做的就是将返回的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();
        } 

        });
    }

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

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();
        } 

        });
    }

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

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

时间: 2024-09-12 01:30:55

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

.Net程序员安卓学习之路5:使用xutils注入View和事件以及图片的显示

原文:.Net程序员安卓学习之路5:使用xutils注入View和事件以及图片的显示 xUtils注入和图片显示 一.xUtils注入 引用官方介绍: ViewUtils模块: •android中的ioc框架,完全注解方式就可以进行UI,资源和事件绑定: •新的事件绑定方式,使用混淆工具混淆后仍可正常工作: •目前支持常用的20种事件绑定,参见ViewCommonEventListener类和包com.lidroid.xutils.view.annotation.event.       之前我

.Net程序员安卓学习之路3:Post数据给网络API

原文:.Net程序员安卓学习之路3:Post数据给网络API 本例我们实现一次真正的网络交互,将数据POST到API,然后接收服务器的返回值进行处理,同时引入自定义类型和传说中阿里的FastJson. 实现思路如: 1. 在API端接收客户POST的数据还原成对象,给每个属性加个后缀后输出: 2. 在客户端输入用户名和密码,用来和服务器端返回的进行对比: 我们POST给服务器的是name=mady&pwd=123,服务器分别加了后缀为name=madya &pwd=1231所以我们客户端需

.Net程序员安卓学习之路6:等待条

原文:.Net程序员安卓学习之路6:等待条 一般在需要访问网络或者长时间操作的时候避免界面无响应才使用:等待条 本例将实现一个无框架的等待条,效果如下: 点击后,使线程Sleep5秒,就出现如下效果:   实现代码如: private ProgressDialog pd; public void btn_click(View v) { pd = ProgressDialog.show(MainActivity.this, "标题", "加载中,请稍后--"); /*

C++程序员在学习C#时需要注意的一些问题(一)

c++|程序|程序员|问题 本文讲述的是C++程序员在学习C#时需要注意的一些问题. C++程序员在学习C#时需要注意的一些问题(一) 1)使用接口(interface)在c#中,使用关键字interface来定义接口:而且,在c#中不能使用多重继承.  interface ICar//接口ICar {  int Speed//属性Speed  {   get;   set;  }   void Run();//接口方法  void Stop(); }  class MyCar : ICar /

程序员谈学习:我为什么要学习Linux?

今天这篇博客不是写关于具体技术的,而是我对程序员怎样学习和提高自己能力的一些感悟.我是今年7月初毕业的,离开学校后就直接进入之前实习的公司上班了.现在算来工作了也将近半年了,算上实习的时间,将近一年了.在这期间,参与了几个android项目的开发,也维护过别人写的项目,虽然都不是很大的项目,但也学习了不少东西.在这其间,我亲身经历了一个设计拙劣的项目,是怎么样一步步趋于混乱而最终变的完全不可维护.从这件事情我了解到优秀的程序员是多么可贵,而"不优秀"的程序员是怎样把项目一步步的搞砸搞烂

编程报错-初级程序员 正在学习老黑莓编程,有几个问题请教

问题描述 初级程序员 正在学习老黑莓编程,有几个问题请教 我是照着黑莓开发入门到精通那本教程书,编的,但是到后来一些页面,编的代码,老是报错,下载的JDE是7.1的,是不是跟教程比是新的,教程里6才刚出来,咋办

一个PHP程序员的站长之路

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 2009年五一长假时从同学那里知道了网赚,当时心里就有了想法,然后从网上找了些如何通过网站赚钱的文章,上边写的基本都能赚点小钱,同时还了解了些SEO的知识,感觉心里有底了,就开始了:一个PHP程序员的站长之路. 首先是页面,我从网上找了个模板,让公司的美工帮着改了一下,中午一起到外边改善了改善,当然是我做东,因为自己还是观望态度,想边做边积累

一个游戏程序员的学习资料

转自:http://software.intel.com/zh-cn/blogs/2012/03/20/400010004/?cid=sw:prccsdn2194 想起写这篇文章是在看侯杰先生的<深入浅出MFC>时, 突然觉得自己在大学这几年关于游戏编程方面还算是有些心得,因此写出这篇小文,介绍我眼中的游戏程序 员的书单与源代码参考.一则是作为自己今后两年学习目标的备忘录,二来没准对别人也有点参考价值.我的原则是只写自己研究过或准备研究的资料,所以内容无 疑会带上强烈的个人喜好色彩, 比如对网

程序员的修炼之路

很荣幸得到墨加的邀请,做了一次线上分享,对我来说一次自我梳理的机会,我把分享的内容整理成这篇文章,时刻激励自己,也希望能给那些和我一样在努力挣扎着的技术同胞们一点参考. 我们先来看看作为一枚程序员,这个行业对我们的要求是怎样的.这是一份工程师的职级表(点进去看),大约是参考腾讯系的技术族职称.我相信看完之后都会有种"路漫漫其修远兮"的感觉,就像游戏中升级打怪一样,开始升级比较快,越往后面越难.这是一场持久战,出征的战士应该时刻都注意检查自己的装备.时刻操练技能. 技能装备 我们应该具备