`
xuela_net
  • 浏览: 497105 次
文章分类
社区版块
存档分类
最新评论

Android仿人人客户端(v5.7.1)——通过HTTPS协议的POST方式获取用户的基本信息

 
阅读更多

转载请标明出处: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);
	}

	@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,也就是说关联到了图片在本地的存储与处理。下一篇我们聊一聊图片的双缓存处理,敬请期待。。。

分享到:
评论

相关推荐

    易语言v5.7.1[极致精简版]

    易语言v5.7.1[极致精简版]易语言v5.7.1[极致精简版]易语言v5.7.1[极致精简版]

    MONyog v5.7.1-0 MySQL Monitor Ultimate for Windows

    MONyog MySQL Monitor Ultimate v5.7.1-0,带序列号,本人亲测可用。 此前由于Webyog频繁的调整注册机制,之前的大部分Key都被封杀后,很久一段时间都用不了5.3以后的官网新版。 现在终于有可以使用的新版了,下载...

    HP-Socket v5.7.1.rar

    HP-Socket v5.7.1版本,2019年12月22日最新的资料,支持C,C++,Delphi和E语言,具体C#语言另一个文件上传,这个文件太大了,传不上去了

    Macro Recorder v5.7.1注册版.rar

    软件介绍: 注:本软件需要安装.net4.0框架,否则无法继续安装。...通过这些功能强大的命令,偿能够做也具有特别功能的脚本程序,可以用于制作游戏外G等。压缩包内附序列号,填写上后即是注册版!

    Rosetta Stone-v5.7.1_build_50701017.apk

    Rosetta Stone-v5.7.1_build_50701017.apk

    node-v5.7.1-sunos-x86.tar.gz

    node-v5.7.1-sunos-x86.tar

    TMS_Component_pack_fullsource V5.7.1安装版

    TMS_Component_pack_fullsource安装版 V5.7.1

    node-v5.7.1-linux-ppc64le.tar.gz

    node-v5.7.1-linux-ppc64le.tar

    MONyog v5.7.1-0 MySQL Monitor.zip

    MySQL监控工具 MONyog可以动态地监控企业数据库环境,并针对MySQL系统安全性、数据库优化以及减少停机时间等提供专家意见。

    qt5.7.1.zip

    Ubuntu 64位 安装Qt creator;版本5.7.1

    int2e-HPSocket.Net-master_v5.7.1.zip

    HPSocket_v5.7.1版本所支持C#文件,需要的可以进行下载,目前国内号称最好的库,超级稳定的一个网络开发库,谢谢

    hue-3.9.0-cdh5.7.1

    hue-3.9.0-cdh5.7.1 源码 hue-3.9.0-cdh5.7.1 源码 hue-3.9.0-cdh5.7.1 源码

    Dev-Cpp 5.7.1

    Dev-Cpp 5.7.1为Windows环境下C/C++开发IDE 含有MinGW

    Access2MySQL Pro v5.7.1

    Access2MySQL 是能允许你转换.mdb((Microsoft Access 数据库)数据库为MySQL以及反之亦然的高效应用程序.不像其他只能进行单向转换的工具.除此之外,Acces2MySQL 支持数据库同步,可以避免重复数据。

    Android技术内幕.系统卷(扫描版)

    《android技术内幕:系统卷》 前言 第1章 准备工作 /1 1.1 深入认识android /2 1.1.1 android的系统构架 /2 1.1.2 android的初始化流程 /5 1.1.3 各个层次之间的相互关系 /8 1.1.4 android系统开发(移植)和应用...

    node-v5.7.1-x86.msi

    此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也...

    node-v5.7.1.tar.xz

    此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也...

    node-v5.7.1.tar.gz

    此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也...

    pypy3-v5.7.1-src.zip

    通过其灵活的架构,它允许用户轻松地部署计算工作在各种平台(CPUs、GPUs、TPUs)上,无论是在桌面、服务器还是移动设备上。TensorFlow最初由Google Brain团队(属于Google的人工智能部门)开发,并在2015年被发布到...

Global site tag (gtag.js) - Google Analytics