博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.Net程序员安卓学习之路3:Post数据给网络API
阅读量:7233 次
发布时间:2019-06-29

本文共 3636 字,大约阅读时间需要 12 分钟。

原文:

本例我们实现一次真正的网络交互,将数据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+"1" };        }

就可以打开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;    }}

 

转载地址:http://kkpfm.baihongyu.com/

你可能感兴趣的文章
ORACLE11g:No Dialect mapping for JDBC type: -9解决方案
查看>>
我的友情链接
查看>>
闲聊Ceph目前在中国的发展Ceph现状
查看>>
我的友情链接
查看>>
CACTI 95th模版导入 及95th模板下载
查看>>
请求头header里的contentType为application/json和capplition/x-www-form-urlencoded
查看>>
迁云的那些事
查看>>
jquery ui 和ext.js一些区别,欢迎给位指正批评
查看>>
clj-xmemcached: memcached client for clojure
查看>>
SecureCRT日志自动记录
查看>>
磁盘 io 测试
查看>>
客户不提供开发者账号打包上传应用的处理方法
查看>>
Netfilter与FreeBSD的网络包过滤
查看>>
闲谈IPv6-现状和过渡
查看>>
我的友情链接
查看>>
Xcode3.2.6+iOS4.2無法上傳iPhone
查看>>
XMPP开发环境的搭建
查看>>
Docker 数据卷,数据卷容器详细介绍
查看>>
使用rman备份到挂载的NFS目录,提示ORA-19504-27054报错
查看>>
通过 rsync 搭建 CentOS 本地 yum 源服务器
查看>>