Android仿人人客户端(v5.7.1)——通过HTTPS协议的POST方式获取用户的基本信息
2013-04-08 09:12
746 查看
转载请标明出处:/article/7738564.html
一、扩展之前的网络模块
基于Android仿人人客户端(v5.7.1)——网络模块处理的架构这篇进行扩展,添加通过HTTPS协议的POST方式访问网络的处理。自定义类(AsyncHttpsPost)让其继承AsyncBaseRequest类,代码如下:
二、获取用户的基本信息
向服务器端发送请求,获取用户的基本信息。注:为什么要使用HTTPS协议发送请求?官方给出的理由,使用HTTPS协议调用API接口可以免去SIG认证。(人人开放平台的API:http://wiki.dev.renren.com/wiki/API)
1、获取用户信息所需的参数
注:AccessToken的值我们之前有在本地存储的,获取的方式如下:
2、发送异步网络请求
3、网络请求返回的JSON
4、对JSON进行解析(这里我们要自己一个字段一个字段的去解吗?不用,我给大家推荐使用谷歌GSON去进行解析。不知道的可以到网上搜下GSON,下载一个jar包导入工程就可以了。)
5、将解析后的结果返回
三、发送网络请求,并解析返回结果的完整代码如下:
附带:用户基本信息实体类
这篇就先聊到这里,上面获取的用户信息里,有用户图像的URL,也就是说关联到了图片在本地的存储与处理。下一篇我们聊一聊图片的双缓存处理,敬请期待。。。
一、扩展之前的网络模块
基于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); } @Override protected 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)——对从服务器端(网络)获取的图片进行本地双缓存处理(编码实现)
- Android仿人人客户端(v5.7.1)——对从服务器端(网络)获取的图片进行本地双缓存处理(编码实现)
- Android仿人人客户端(v5.7.1)——对从服务器端(网络)获取的图片进行本地双缓存处理(流程图或活动图)
- Android仿人人客户端(v5.7.1)——对从服务器端(网络)获取的图片进行本地双缓存处理(编码实现)
- 图片、缓存-Android仿人人客户端(v5.7.1)——对从服务器端(网络)获取的图片进行本地双缓存处理(编码实现)-by小雨
- 通过httpclinet登录网站(https),并且获取网页上的信息。post+get
- Android仿人人客户端(v5.7.1)——有关滑动式左侧菜单实现过程中网友的疑问解答
- Android仿人人客户端(v5.7.1)——网络模块时序图
- Android仿人人客户端(v5.7.1)——个人主页(三)
- 通过WifiManager,DhcpInfo获取android IP地址及网关等信息(两种方式)
- Android仿人人客户端(v5.7.1)——新鲜事之完整篇
- Java 通过HttpClient 带证书方式请求Https协议网站 (Post方式带xml文档,Get以及Delete方式)
- Android仿人人客户端(v5.7.1)——个人主页(三)
- Android客户端采用Http 协议Post方式请求与服务端进行数据交互
- 微信开发第5章 通过accesstoken获取用户基本信息并修改用户备注
- Android客户端采用Http 协议Post方式请求与服务端进行数据交互(转)
- 通过WifiManager,DhcpInfo获取android IP地址及网关等信息(两种方式)
- Android 使用三种方式获取网页(通过Post,Get进行表单的提交)
- Android仿人人客户端(v5.7.1)——人人授权访问界面
- 微信公众平台--网页授权获取用户基本信息(snsapi_userinfo方式)