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

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

分享到:
评论

相关推荐

    HP-Socket v5.7.1.rar

    在HP-Socket v5.7.1中,开发者可以利用其强大的API来实现基于TCP或UDP的客户端和服务器端应用。例如,可以创建服务器监听客户端的连接请求,或者创建客户端连接到远程服务器进行数据交换。库中的接口通常包括建立...

    MONyog v5.7.1-0 MySQL Monitor.zip

    通过MONyog v5.7.1-0,MySQL管理员可以更有效地管理他们的数据库环境,及时发现问题,避免性能下降和不必要的停机。这个版本可能包含了改进和修复,以增强用户体验和监控效率。使用此工具,用户可以确保他们的MySQL...

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

    标题 "node-v5.7.1-linux-ppc64le.tar.gz" 指的是一个针对Linux PPC64LE架构的Node.js版本5.7.1的源代码压缩包。Node.js是一款开源、跨平台的JavaScript运行环境,它允许开发者在服务器端执行JavaScript代码,极大地...

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

    尽管是精简版,但易语言v5.7.1仍然能提供基本的编程功能,满足开发者日常编程需求。对于初学者,这是一个很好的起点,因为它将编程的复杂性隐藏在易于理解的汉字背后,让编程变得更加亲民。而对于有经验的开发者,...

    TMS_Component_pack_fullsource V5.7.1安装版

    【TMS_Component_pack_fullsource V5.7.1安装版】是一个专为IT开发者设计的组件包,提供了丰富的源代码支持。此版本是V5.7.1,意味着它是该系列产品的更新迭代,通常会包含错误修复、性能优化以及新增功能。TMS ...

    MONyog v5.7.1-0 MySQL Monitor Ultimate for Windows

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

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

    标题 "node-v5.7.1-sunos-x86.tar.gz" 暗示了这是一个针对SunOS操作系统(Solaris的别名)32位架构的Node.js版本5.7.1的源代码压缩包。这个文件是用gzip压缩算法进行压缩的,通常用于在Linux和Unix-like系统中分发...

    gforge-ce_v5.7.1-src

    标题 "gforge-ce_v5.7.1-src" 指的是开源项目管理软件 GForge Community Edition 的一个特定版本——5.7.1的源代码。GForge 是一个功能丰富的协同开发平台,它集成了持续集成(CI)功能,允许团队高效地进行软件开发...

    int2e-HPSocket.Net-master_v5.7.1.zip

    《HPSocket.Net:构建高效稳定的C#网络应用》 HPSocket.Net是专为C#开发者设计的一款网络通信库...通过下载HPSocket.Net-master_v5.7.1.zip压缩包,开发者可以获得完整的源代码和文档,进一步了解和使用这一优秀工具。

    Rosetta Stone-v5.7.1_build_50701017.apk

    Rosetta Stone-v5.7.1_build_50701017.apk

    evglobe客户端安装包EV-Globe-Client-5.1-Win64-X64-QT5.7.1-VS2015-202301

    描述中的信息与标题相同,再次确认这是一个名为“evglobe”的客户端安装包,版本号为5.1,特别适用于64位Windows系统,并且依赖于Qt 5.7.1和Visual Studio 2015的编译环境。这表明开发人员使用了Visual Studio 2015...

    Macro Recorder v5.7.1注册版.rar

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

    qt5.7.1.zip

    总之,"qt5.7.1.zip"是为Ubuntu 64位系统提供的Qt Creator 5.7.1安装包,通过简单的几步操作,开发者可以在自己的环境中搭建起一套完整的Qt开发环境,从而利用其丰富的功能进行高效的应用程序开发。

    Dev-Cpp 5.7.1

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

    hue-3.9.0-cdh5.7.1

    Hue是Apache Hadoop生态系统中的一个开源Web界面,它允许用户以直观的方式与Hadoop集群进行交互,包括数据浏览、查询、分析以及管理任务。"hue-3.9.0-cdh5.7.1"是Hue的一个特定版本,专为Cloudera Data Hub (CDH) ...

    qt data visualization 5.7.1 源码

    这个库允许开发者通过2D和3D图形来展示复杂的数据,从而帮助用户更好地理解和分析信息。在5.7.1版本中,QT Data Visualization 提供了若干关键功能和改进,使得它在数据科学、工程、商业智能等领域有着广泛的应用。 ...

    FormatFactory_5.7.1.zip

    **格式工厂(Format Factory)**是一款广泛使用的多媒体转换软件,其最新版本为5.7.1。这款软件的核心功能在于帮助用户将各种类型的视频、音频、图片以及文档等文件进行格式转换,使其适应不同的设备、播放器或者...

Global site tag (gtag.js) - Google Analytics