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);
### 最后
针对Android程序员,我这边给大家整理了一些资料,包括不限于高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter等全方面的Android进阶实践技术;希望能帮助到大家,也节省大家在网上搜索资料的时间来学习,也可以分享动态给身边好友一起学习!
* **Android前沿技术大纲**
![](https://img-blog.csdnimg.cn/img_convert/24c9a0da8ac732a33534d6924bfb728d.webp?x-oss-process=image/format,png)
* **全套体系化高级架构视频**
![](https://img-blog.csdnimg.cn/img_convert/151cce1cc3b3ee560cc06cb79773e6ac.webp?x-oss-process=image/format,png)
> **Android高级架构资料、源码、笔记、视频。高级UI、性能优化、架构师课程、混合式开发(ReactNative+Weex)全方面的Android进阶实践技术,群内还有技术大牛一起讨论交流解决问题。**
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618156601)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
*全套体系化高级架构视频**
[外链图片转存中...(img-6Tif9XSn-1714360956251)]
> **Android高级架构资料、源码、笔记、视频。高级UI、性能优化、架构师课程、混合式开发(ReactNative+Weex)全方面的Android进阶实践技术,群内还有技术大牛一起讨论交流解决问题。**
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618156601)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**