本例我们实现一次真正的网络交互,将数据POST到API,然后接收服务器的返回值进行处理,同时引入自定义类型和传说中阿里的FastJson。

实现思路如:

1. 在API端接收客户POST的数据还原成对象,给每个属性加个后缀后输出;

2. 在客户端输入用户名和密码,用来和服务器端返回的进行对比;

我们POST给服务器的是name=mady&pwd=123,服务器分别加了后缀为name=madya

&pwd=1231所以我们客户端需要输入madya和1231才能验证成功。

具体操作展示如下:

一、准备API:

目前写API使用ASP.NET WEB API2再合适不过了。在VS2013中创建一个API项目,先配置他支持JSON:

打开项目中的WebApiConfig文件,在Register方法中加入一个配置项:

config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));

创建实体类如:

    public class UserInfo
{
public string name { get; set; }
public string pwd { get; set; }
}

打开ValuesController修改代码如下:

        // POST api/values
public UserInfo Post([FromBody]UserInfo value)
{
return new UserInfo { name = value.name + "a", pwd = value.pwd+"" };
}

就可以打开Fidder调试了,直到成功为止:

二、引入阿里的FastJson包

直接右键粘贴进去即可:

这个包真心好使:

String json=JSON.toJSONString(user);     //序列化
UserInfo userInfo=JSON.parseObject(json,UserInfo.class); //反序列化

就这2句话全部搞定。

我们继续,先新建一个Java的实体类:

import java.io.Serializable;

public class UserInfo implements Serializable{
private String name;
private String pwd; public String getPwd()
{
return pwd;
} public void setPwd(String pwd)
{
this.pwd = pwd;
} public String getName()
{
return name;
} public void setName(String name)
{
this.name = name;
} }

然后修改网络访问类,上节那个太简陋了(见附)。

然后修改异步部分代码:

        protected String doInBackground(String... params)
{
// String citiesString ="{\"name\":\"mady\",\"pwd\":123}";
UserInfo user=new UserInfo();
user.setName("mady");
user.setPwd("123"); String str_json=JSON.toJSONString(user);
return HttpUtils.sendPostMessage(params[0],str_json);
}

和完成代码:

        protected void onPostExecute(String result)
{
TextView lblInfo=(TextView)findViewById(R.id.form_title);
EditText txt_login_name=(EditText)findViewById(R.id.txt_login_name);
EditText txt_login_pass=(EditText)findViewById(R.id.txt_login_pwd);
String loginName=txt_login_name.getText().toString().trim();
String loginPass=txt_login_pass.getText().toString().trim(); UserInfo userInfo=JSON.parseObject(result,UserInfo.class);
if(loginPass.equals(userInfo.getPwd())&&loginName.equals(userInfo.getName()))
{
lblInfo.setText("登录成功!");
}
else
{
lblInfo.setText("登录失败!");
}
}

到此完工,没有修改的就是没有变化的。

附上新网络访问类:

public class HttpUtils
{
/**
* @param path 请求的服务器URL地址
* @param encode 编码格式
* @return 将服务器端返回的数据转换成String
*/
public static String sendPostMessage(String path,String jsonStr)
{
String result = "";
HttpClient httpClient = new DefaultHttpClient();
try
{
HttpPost httpPost = new HttpPost(path);
httpPost.addHeader("content-type","text/json"); httpPost.setEntity(new StringEntity(jsonStr));
HttpResponse httpResponse = httpClient.execute(httpPost); if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK)
{
// Log.e("Json+++++2:", jsonStr); log info for debug
HttpEntity httpEntity = httpResponse.getEntity();
if(httpEntity != null)
{
result = EntityUtils.toString(httpEntity, "UTF-8");
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
httpClient.getConnectionManager().shutdown();
} return result;
}
}

.Net程序员安卓学习之路3:Post数据给网络API的更多相关文章

  1. .Net程序员安卓学习之路1:登陆界面

    任何编程学习起步均是HelloWorld,作为稍有>net编程经验的我们来说就跳过这步吧,咱们且从简单登录界面开始.先看看效果: 一.准备知识: 1. 安卓环境:安装好JDK,直接去官网下载AD ...

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

    前面使用了一些网络上找来的类进行网络访问,后来发现了安卓开发中有一个国人写的类库xutils比较全面,也比较经典,故后续使用xutils类库进行记录. 本例服务端使用WCF来实现,写好的WCF服务端在 ...

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

    一般在需要访问网络或者长时间操作的时候避免界面无响应才使用:等待条 本例将实现一个无框架的等待条,效果如下: 点击后,使线程Sleep5秒,就出现如下效果: 实现代码如: private Progre ...

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

    xUtils注入和图片显示 一.xUtils注入 引用官方介绍: ViewUtils模块: •android中的ioc框架,完全注解方式就可以进行UI,资源和事件绑定: •新的事件绑定方式,使用混淆工 ...

  5. .Net程序员安卓学习之路2:访问网络API

    做应用型的APP肯定是要和网络交互的,那么本节就来实战一把Android访问网络API,还是使用上节的DEMO: 一.准备API: 一般都采用Json作为数据交换格式,目前各种语言均能输出Json串. ...

  6. zz 游戏程序员的学习之路(中文版)

    游戏程序员的学习之路(中文版) Milo Yip · 1 天前 感谢 @楚天阔(tkchu)编写脚本及整理中文译本数据,自动从英文版生成中文版,SVG / PDF 版本中的书籍图片现在链接至豆瓣页面. ...

  7. GJM : 游戏程序员的学习之路

    原文作者:miloyip  原帖地址:http://gad.qq.com/article/detail/7180681 原帖备注:版权所有,禁止匿名转载:禁止商业使用:禁止个人使用. 腾讯前端技术总监 ...

  8. 五年.net程序员Java学习之路

    大学毕业后笔者进入一家外企,做企业CRM系统开发,那时候开发效率最高的高级程序语言,毫无疑问是C#.恰逢公司也在扩张,招聘了不少.net程序员,笔者作为应届生,也乐呵呵的加入到.net程序员行列中. ...

  9. 2017PHP程序员的进阶之路

    2017PHP程序员的进阶之路 又是一年毕业季,可能会有好多毕业生即将进入开发这个圈子,踏上码农这个不归路.根据这些年在开发圈子总结的LNMP程序猿发展轨迹,结合个人经验体会,总结出很多程序员对未来的 ...

随机推荐

  1. 简单几何(圆与多边形公共面积) UVALive 7072 Signal Interference (14广州D)

    题目传送门 题意:一个多边形,A点和B点,满足PB <= k * PA的P的范围与多边形的公共面积. 分析:这是个阿波罗尼斯圆.既然是圆,那么设圆的一般方程:(x + D/2) ^ 2 + (y ...

  2. iOS @try

    try{ //1:抛出异常的代码 //2:代码 }catch(){ //3:代码 //4:抛出异常 }finally{ //5:代码 } //6:代码要明确的一点是:不管try是否抛出异常,final ...

  3. HDU 4507 (鬼畜级别的数位DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4507 题目大意:求指定范围内与7不沾边的所有数的平方和.结果要mod 10^9+7(鬼畜の元凶) 解题 ...

  4. 【BZOJ】1049: [HAOI2006]数字序列(lis+特殊的技巧)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1049 题意:给一个长度为n的整数序列.把它变成一个单调严格上升的序列.但是不希望改变过多的数,也不希 ...

  5. StereoBM::disp12MaxDiff Crash the Release

    Initializing "cv::StereoBM bm.state->disp12MaxDiff" should be careful, inappropriate va ...

  6. 常用的一些webshell木马官方后门

    80SEC剑心修改过世界杀毒版 http://wwwxx.cn/1.asp?web2a2dmin=//?web2a2dmin=//1.asp  绕过 不灭之魂的后门 1.在错误页面右键可以查看密码 2 ...

  7. MySQL复制延时排查

    今天收到报警,提示从库延时,首先当然是上去查看情况,首先查看机器负载,如下: 可以看到使用cpu已经100%,io没有等待.那么查看mysql是什么情况,执行show processlist没有发现任 ...

  8. [转]在Entity Framework中使用LINQ语句分页

    本文转自:http://diaosbook.com/Post/2012/9/21/linq-paging-in-entity-framework 我们知道,内存分页效率很低.并且,如果是WebForm ...

  9. 【新产品发布】发布STM8S 核心板

    搞了一些STM8的核心板供大家把玩,先上几张图: 物品购买地址: http://item.taobao.com/item.htm?spm=686.1000925.1000774.17.5GMO5M&a ...

  10. Scrum会议3

    组名称:天天向上 项目名称:连连看 参会成员:王森(Master)张金生 张政 栾骄阳 时间:2016.10.18 已完成内容: 1.GUI布局设计 2.通过在网上大量阅览代码,大体了解连连看游戏制作 ...