Android:SNS客户端开发二:获取授权账号资料

      在上一篇文章中,大致介绍了基于新浪微博开放平台的OAuth认证方法及相关实现。那么在用户成功授权,取到相应的AccessToken以及Access_secret后,我们就可以利用这两个值通过新浪提供的对应API,去获取用户资料了。

     这里我们需要用到Http请求相关的内容。获取用户资料是采用的Get方法,此处只放出Get方法的相应代码。使用HttpClient开源项目,该项目已经被Android包含无需单独引入jar包。

    在获取用户资料时。通过Get方法传递的单数都要统一经过UTF-8编码,并且与OAuth认证相关的参数一起签名后再发送到服务器。废话不多说,先看Get方法的代码。

public class WeiBoClient {
	private OAuthConsumer consumer;
	public WeiBoClient() {

	}
	public WeiBoClient(String consumerKey, String consumerSecret,
			String oauthToken, String oauthTokenSecret) {
		// 生成一个OAuthConsumer对象
		consumer = new CommonsHttpOAuthConsumer(consumerKey, consumerSecret);
		// 设置OAuth_Token和OAuth_Token_Secret
		consumer.setTokenWithSecret(oauthToken, oauthTokenSecret);	
	}

	public String doGet(String url, List<NameValuePair> addtionalParams) throws ClientProtocolException, IOException, OAuthMessageSignerException, OAuthExpectationFailedException, OAuthCommunicationException {
		String result = null;
		url = buildUrlByQueryAndBaseUrl(url, addtionalParams);
		String signedUrl = null;
		
			System.out.println("签名之前的URL--->" + url);
			signedUrl = consumer.sign(url);
			System.out.println("签名之后的URL--->" + signedUrl);
		
		HttpGet getRequest = new HttpGet(signedUrl);
		HttpClient httpClient = new DefaultHttpClient();
		HttpResponse response = null;
		
			response = httpClient.execute(getRequest);
		
		result = parseStringFromEntity(response.getEntity());
		return result;
	}
public String buildUrlByQueryAndBaseUrl(String url,List<NameValuePair> pairs){
      String queryStr = URLEncodedUtils.format(pairs, "UTF-8");
      return url + "?" + queryStr;
}
public String parseStringFromEntity(HttpEntity entity){
String result = null;
		try {
			InputStream input = entity.getContent();
			BufferedReader reader = new BufferedReader(new InputStreamReader(
					input));
			String line = null;
			StringBuffer sb = new StringBuffer();
			while ((line = reader.readLine()) != null) {
				sb.append(line);
			}
			result = sb.toString();
		} catch (Exception e) {
			System.out.println(e);
		}
		return result;
}
}

 再在外部Activity中调用相应的方法就能获取到账号的资料了

public void getUser(String access_token, String access_secret,
			String user_id) throws ClientProtocolException, OAuthMessageSignerException, OAuthExpectationFailedException, OAuthCommunicationException, IOException {// 添加用户
				List<NameValuePair> params = new ArrayList<NameValuePair>();
		BasicNameValuePair user_id = new BasicNameValuePair("user_id", user_id);
		params.add(user_id);
		WeiBoClient weibo = new WeiBoClient(SinaConstant.CONSUMER_KEY,SinaConstant.CONSUMER_SECRET, access_token, access_secret);
		keyValues.put("user_id", user_id);
		String userInfo;
		
			userInfo = weibo.doGet(
					"http://api.t.sina.com.cn/users/show.json", params);
		
		System.out.println(userInfo);
		JSONObject user = null;
		try {//对获取到资料信息进行JSON解析
			user = new JSONObject(userInfo);
			String headUrl = user.getString("profile_image_url");
			System.out.println(headUrl);

			String screen_name = user.getString("screen_name");
			String name = user.getString("name");
			System.out.println(screen_name + "&&&" + name);

			
		} catch (Exception e) {
			e.printStackTrace();
		}
		// return null;
			}

 以上代码中的user_id为上一篇文章中我们获取到的对应的用户id。传入参数请参考新浪微博开放平台的API文档,地址如下:http://open.weibo.com/wiki/Users/show

 

注:我这里对所有方法的异常处理均为抛出,直到最顶层调用该方法时再捕捉

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值