Android仿人人客户端(v5.7.1)——通过HTTPS协议的POST方式获取用户的基本信息
来源:互联网 发布:知网查重 知乎 编辑:程序博客网 时间:2024/05/29 14:11
转载请标明出处:http://blog.csdn.net/android_ls/article/details/8770537
一、扩展之前的网络模块
基于Android仿人人客户端(v5.7.1)——网络模块处理的架构这篇进行扩展,添加通过HTTPS协议的POST方式访问网络的处理。自定义类(AsyncHttpsPost)让其继承AsyncBaseRequest类,代码如下:
package com.everyone.android.net;import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import java.util.Map;import org.apache.http.HttpResponse;import org.apache.http.NameValuePair;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.HttpPost;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.message.BasicNameValuePair;import org.apache.http.protocol.HTTP;import com.everyone.android.callback.ParseCallback;import com.everyone.android.callback.ResultCallback;/** * 功能描述:通过HTTPS协议发送POST网络请求 * @author android_ls * */public class AsyncHttpsPost extends AsyncBaseRequest {/** * */private static final long serialVersionUID = 4L;public AsyncHttpsPost(String url, Map<String, String> parameter,ParseCallback handler, ResultCallback requestCallback) {super(url, parameter, handler, requestCallback);}@Overrideprotected InputStream getRequestResult() throws IOException { List<NameValuePair> paramPairs = new ArrayList<NameValuePair>(); if(parameter != null && !parameter.isEmpty()){ for(Map.Entry<String, String> entry : parameter.entrySet()){ paramPairs.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); } } UrlEncodedFormEntity entitydata = new UrlEncodedFormEntity(paramPairs, HTTP.UTF_8); HttpPost post = new HttpPost(requestUrl); post.setEntity(entitydata); DefaultHttpClient client = new DefaultHttpClient(); // 执行POST方式请求 HttpResponse response = client.execute(post); if(response.getStatusLine().getStatusCode()==200){ return response.getEntity().getContent(); } return null;}}
二、获取用户的基本信息
向服务器端发送请求,获取用户的基本信息。注:为什么要使用HTTPS协议发送请求?官方给出的理由,使用HTTPS协议调用API接口可以免去SIG认证。(人人开放平台的API:http://wiki.dev.renren.com/wiki/API)
1、获取用户信息所需的参数
String url = "https://api.renren.com/restserver.do"; Map<String, String> parameter = new HashMap<String, String>(); parameter.put("v", "1.0"); // API的版本号,固定值为1.0 parameter.put("access_token", accessToken); // OAuth2.0验证授权后获得的token。 parameter.put("format", "JSON"); // 返回值的格式。请指定为JSON或者XML,推荐使用JSON,缺省值为XML parameter.put("call_id", "1.0"); // 请求队列号 parameter.put("method", "users.getInfo"); // 你要访问那个接口,我们肯定调用获取用户的信息的接口咯,该接口支持批量获取。
注:AccessToken的值我们之前有在本地存储的,获取的方式如下:
mAuthTokenManager = new AuthTokenManager(this); String accessToken = mAuthTokenManager.getAccessToken(); LogUtil.e("EveryoneActivity", "accessToken = " + accessToken);
2、发送异步网络请求
AsyncBaseRequest asyncHttpsPost = new AsyncHttpsPost(url, parameter, new ParseCallback() { @Override public Object parse(String json) throws JSONException { LogUtil.i("EveryoneActivity", "json = " + json); return null; } }, new ResultCallback() { @Override public void onSuccess(Object obj) { } @Override public void onFail(int errorCode) { // TODO Auto-generated method stub } }); mDefaultThreadPool.execute(asyncHttpsPost); mAsyncRequests.add(asyncHttpsPost);
3、网络请求返回的JSON
[ { "uid":461345584, "tinyurl":"http://hdn.xnimg.cn/photos/hdn521/20130319/1930/h_tiny_zggz_8829000002e6113e.jpg", "vip":1, "sex":1, "name":"逐鹿。。。", "star":1, "headurl":"http://hdn.xnimg.cn/photos/hdn521/20130319/1930/h_head_jbdD_8829000002e6113e.jpg", "zidou":0 } ]
4、对JSON进行解析(这里我们要自己一个字段一个字段的去解吗?不用,我给大家推荐使用谷歌GSON去进行解析。不知道的可以到网上搜下GSON,下载一个jar包导入工程就可以了。)
new ParseCallback() { @Override public Object parse(String json) throws JSONException { LogUtil.i("EveryoneActivity", "json = " + json); Gson gson = new Gson(); java.lang.reflect.Type type = new TypeToken<LinkedList<UserBasicInfo>>(){}.getType(); LinkedList<UserBasicInfo> userList = gson.fromJson(json, type); return userList.get(0); } }
5、将解析后的结果返回
new ResultCallback() { @Override public void onSuccess(Object obj) { UserBasicInfo userBasic = (UserBasicInfo)obj; LogUtil.i("EveryoneActivity", "userBasic = " + userBasic.toString()); } @Override public void onFail(int errorCode) { // TODO Auto-generated method stub } }
三、发送网络请求,并解析返回结果的完整代码如下:
mAuthTokenManager = new AuthTokenManager(this); String accessToken = mAuthTokenManager.getAccessToken(); LogUtil.e("EveryoneActivity", "accessToken = " + accessToken); // 获取用户信息所需的参数 String url = "https://api.renren.com/restserver.do"; Map<String, String> parameter = new HashMap<String, String>(); parameter.put("v", "1.0"); // API的版本号,固定值为1.0 parameter.put("access_token", accessToken); // OAuth2.0验证授权后获得的token。 parameter.put("format", "JSON"); // 返回值的格式。请指定为JSON或者XML,推荐使用JSON,缺省值为XML parameter.put("call_id", "1.0"); // 请求队列号 parameter.put("method", "users.getInfo"); // 你要访问那个接口,我们肯定调用用获取用户的信息的接口咯,该接口支持批量获取。 AsyncBaseRequest asyncHttpsPost = new AsyncHttpsPost(url, parameter, new ParseCallback() { @Override public Object parse(String json) throws JSONException { LogUtil.i("EveryoneActivity", "json = " + json); Gson gson = new Gson(); java.lang.reflect.Type type = new TypeToken<LinkedList<UserBasicInfo>>() { }.getType(); LinkedList<UserBasicInfo> userList = gson.fromJson(json, type); return userList.get(0); } }, new ResultCallback() { @Override public void onSuccess(Object obj) { UserBasicInfo userBasic = (UserBasicInfo) obj; LogUtil.i("EveryoneActivity", "userBasic = " + userBasic.toString()); } @Override public void onFail(int errorCode) { // TODO Auto-generated method stub } }); mDefaultThreadPool.execute(asyncHttpsPost); mAsyncRequests.add(asyncHttpsPost);
附带:用户基本信息实体类
package com.everyone.android.entity;/** * 功能描述:用户基本信息实体类 * @author android_ls * */public class UserBasicInfo { private int uid; // 用户id private String tinyurl; // 头像链接 50*50大小 private int sex; // 性别,值1表示男性;值0表示女性 private String name; // 用户名 private int star; // 是否为星级用户,值“1”表示“是”;值“0”表示“不是” private String headurl; // 头像链接 100*100大小 private int zidou; // 是否为vip用户,值1表示是;值0表示不是 private int vip; // 是否为vip用户等级,前提是zidou节点必须为1 public int getUid() { return uid; } public void setUid(int uid) { this.uid = uid; } public String getTinyurl() { return tinyurl; } public void setTinyurl(String tinyurl) { this.tinyurl = tinyurl; } public int getSex() { return sex; } public void setSex(int sex) { this.sex = sex; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getStar() { return star; } public void setStar(int star) { this.star = star; } public String getHeadurl() { return headurl; } public void setHeadurl(String headurl) { this.headurl = headurl; } public int getZidou() { return zidou; } public void setZidou(int zidou) { this.zidou = zidou; } public int getVip() { return vip; } public void setVip(int vip) { this.vip = vip; } @Override public String toString() { return "UserBasicInfo [uid=" + uid + ", tinyurl=" + tinyurl + ", sex=" + sex + ", name=" + name + ", star=" + star + ", headurl=" + headurl + ", zidou=" + zidou + ", vip=" + vip + "]"; }}
这篇就先聊到这里,上面获取的用户信息里,有用户图像的URL,也就是说关联到了图片在本地的存储与处理。下一篇我们聊一聊图片的双缓存处理,敬请期待。。。
- Android仿人人客户端(v5.7.1)——通过HTTPS协议的POST方式获取用户的基本信息
- Android仿人人客户端(v5.7.1)——欢迎和导引界面的类图
- Android仿人人客户端(v5.7.1)——欢迎和导引界面的编码实现
- Android仿人人客户端(v5.7.1)——网络模块处理的架构
- Android仿人人客户端(v5.7.1)——消息中心视图的实现
- Android仿人人客户端(v5.7.1)——网络模块处理的架构
- Android仿人人客户端(v5.7.1)——对从服务器端(网络)获取的图片进行本地双缓存处理(流程图或活动图)
- Android仿人人客户端(v5.7.1)——对从服务器端(网络)获取的图片进行本地双缓存处理(编码实现)
- Android仿人人客户端(v5.7.1)——人人授权访问界面
- Android仿人人客户端(v5.7.1)——主流程(活动)图
- Android仿人人客户端(v5.7.1)——个人主页(一)
- Android仿人人客户端(v5.7.1)——个人主页(二)
- Android仿人人客户端(v5.7.1)——个人主页(三)
- Android仿人人客户端(v5.7.1)——网络模块优化
- Android仿人人客户端(v5.7.1)——网络模块时序图
- Android仿人人客户端(v5.7.1)——点击左侧菜单栏中的Item切换视图
- Android仿人人客户端(v5.7.1)——新鲜事之状态
- Android仿人人客户端(v5.7.1)——新鲜事之分享照片
- sqlserver函数大全
- Java虚拟机学习分享
- 一份中文的 redis.conf配置说明(转)
- Uva11997——优先队列,多路合并
- Lucene的自定义评分
- Android仿人人客户端(v5.7.1)——通过HTTPS协议的POST方式获取用户的基本信息
- 微软一站式示例代码库下载过热导致下载计数器溢出bug
- 求高薪有学问
- Java接口学习笔记
- java中接口的定义与实现
- javascript(二)
- Java 接口大全、面向接口编程、什么时候用接口、选择Java接口or抽象类
- 手机天线最新资料大全
- HDwire取代LVDS技术详释[图]