转载请标明出处: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() {@Overridepublic Object parse(String json) throws JSONException {LogUtil.i("EveryoneActivity", "json = " + json);return null;}}, new ResultCallback() {@Overridepublic void onSuccess(Object obj) {}@Overridepublic 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() {@Overridepublic 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() {@Overridepublic void onSuccess(Object obj) {UserBasicInfo userBasic = (UserBasicInfo)obj;LogUtil.i("EveryoneActivity", "userBasic = " + userBasic.toString());}@Overridepublic 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() {@Overridepublic 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() {@Overridepublic void onSuccess(Object obj) {UserBasicInfo userBasic = (UserBasicInfo) obj;LogUtil.i("EveryoneActivity", "userBasic = " + userBasic.toString());}@Overridepublic 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;}@Overridepublic 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方式获取用户的基本信息相关推荐

  1. Android仿人人客户端(v5.7.1)——项目框架新做的调整描述(项目中基类java源码)...

    转载请标明出处:http://blog.csdn.net/android_ls/article/details/8909068 声明:没看过仿人人android客户端系列博文,前面的相关文章的朋友,请 ...

  2. Android仿人人客户端(v5.7.1)——对从服务器端(网络)获取的图片进行本地双缓存处理(编码实现)...

    转载请标明出处:http://blog.csdn.net/android_ls/article/details/8797740 这篇是基于上一篇Android仿人人客户端(v5.7.1)--对从服务器 ...

  3. Android仿人人客户端(v5.7.1)——采用RelativeLayout做父容器,实现左侧滑动菜单(二)...

    转载请标明出处:http://blog.csdn.net/android_ls/article/details/8758943 上一篇在Android仿人人客户端(v5.7.1)--应用主界面之滑动效 ...

  4. Android仿人人客户端(v5.7.1)——网络模块处理的架构

    转载请标明出处:http://blog.csdn.net/android_ls/article/details/8732427 声明:仿人人项目,所用所有图片资源都来源于官方人人android客户端, ...

  5. Android仿人人客户端(v5.7.1)——采用RelativeLayout做父容器,实现左侧滑动菜单(二)

    转载请标明出处:http://blog.csdn.net/android_ls/article/details/8758943 上一篇在Android仿人人客户端(v5.7.1)--应用主界面之滑动效 ...

  6. Android仿人人客户端(v5.7.1)——新鲜事之下拉列表(过滤项列表)

    转载请标明出处:http://blog.csdn.net/android_ls/article/details/8884335 声明:仿人人项目,所用所有图片资源都来源于其它Android移动应用,编 ...

  7. Android仿人人客户端(v5.7.1)——点击左侧菜单栏中的Item切换视图

    转载请标明出处:http://blog.csdn.net/android_ls/article/details/8765193 在前面几讲中,左侧菜单(左侧面板).满足滑动或点击子View的方式,打开 ...

  8. Android仿人人客户端(v5.7.1)——应用主界面之左侧面板UI实现

    转载请标明出处:http://blog.csdn.net/android_ls/article/details/8749188 声明:仿人人项目,所用所有图片资源都来源于其它Android移动应用,编 ...

  9. Android仿人人客户端(v5.7.1)——Auth授权认证(整理流程,重构代码)

    转载请标明出处:http://blog.csdn.net/android_ls/article/details/8748901 声明:关于仿人人项目,我是边看人人官方提供的API,边思考,整理好思路, ...

最新文章

  1. 如何将txt格式的数据导入到MATLAB中,并绘制图线
  2. Linux底层函数库“glibc”再现重大安全漏洞
  3. 170多个Ionic Framework学习资源(转载)
  4. php dropdownlist,遇到dropdownlist
  5. 使用Forge插件在现有Java EE项目上启用Arquillian
  6. hutool 获取某月最后一天_hutool定时任务
  7. aws中部署防火墙_如何在AWS中设置自动部署
  8. Oracle Sql 胡乱记
  9. 前后端分离重复提交_阿里一面:如何保证API接口数据安全?
  10. 设置eclipse代码自动补全功能
  11. linux常用命令100个(转)
  12. 货物贸易外汇监测系统 企业版_企业能耗在线监测系统介绍
  13. TCP的三次握手和四次挥手(超详解)
  14. 易语言大漠插件模块制作使用系统字库找字
  15. 如何备考软考中级-系统集成项目管理工程师
  16. llvm如何使用vc编译器_使用LLVM框架创建有效的编译器,第2部分
  17. C++简单程序编写和操作步骤
  18. 裴蜀定理(或 贝祖定理 )
  19. python考研成绩_出考研初试成绩之后
  20. eclipse 快捷调整字体_一键就能调文字大小?Word当中你所不知的快捷键-eclipse字体大小设置...

热门文章

  1. 壳体花纹怎么设计_换热器设计大全
  2. MacOS使用top命令查看进程使用内存
  3. python21天打卡Day10-string和bytes互转
  4. python modbus tk 库_python modbus_tk模块学习笔记(rtu slaver例程)
  5. asp.net core文档下载_推荐一个必备的开源项目 (附下载链接)
  6. oracle excute call,oracle – EXECUTE识别存储过程,CALL不识别
  7. java 中特殊的_Java中一些特殊关键字
  8. Detailed Full-Body Reconstructions of Moving People from Monocular RGB-D Sequences
  9. DynamicFusion: Reconstruction and Tracking of Non-rigid scenes in real-time
  10. 自定义训练中使用Tensorboard