开发者社区> 杰克.陈> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

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

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

实现思路如:

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

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

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

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

具体操作展示如下:

wps3BD7.tmp

wps3BD8.tmp

一、准备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调试了,直到成功为止:

wps3BE9.tmp

 

二、引入阿里的FastJson包

直接右键粘贴进去即可:

wps3BFA.tmp

这个包真心好使:

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

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
基于Qt的网络音乐播放器(四)酷狗API接口获取歌曲的搜索列表和歌曲的播放
基于Qt的网络音乐播放器(四)酷狗API接口获取歌曲的搜索列表和歌曲的播放
0 0
带你读《Python网络编程(原书第2版)》之三:API和意图驱动网络
本书是一本实用型的基础技术实践工具书,技术性较强,如果你想快速了解计算机网络管理、网络安全、自动化运维、Python Web搭建、网络测试相关的知识,本书很适合你。本书涵盖的知识点主要是网络运维相关技术,在学习完所有的章节之后,读者能对网络的管理有初步的了解。每个章节的后面部分都是有一定难度的扩展资源,循序渐进,帮助读者提升网络运维能力。
110 0
犯罪分子瞄准WordPress REST API漏洞进行网络黑产活动
本文讲的是犯罪分子瞄准WordPress REST API漏洞进行网络黑产活动,1月26日,WordPress 释放安全更新 WordPress 4.7.2,修复了 4 个安全漏洞
1383 0
《UNIX网络编程 卷1:套接字联网API(第3版)》——1.8 BSD网络支持历史
源自Berkeley的最终版本是1994年的4.4BSD-Lite和1995年的4.4BSD-Lite2。我们指出这两个版本是其他多个系统(包括BSD/OS、FreeBSD、NetBSD和OpenBSD)的基础,这些系统大多数仍然处于活跃的开发和完善之中。
1554 0
+关注
杰克.陈
一个安静的程序猿~
文章
问答
文章排行榜
最热
最新
相关电子书
更多
可预期数据中心网络
立即下载
可编程网络视角的网络创新研究
立即下载
思科软件定义访问:实现基于业务意图的园区网络
立即下载