1. 获取百度个人信息(使用Gson解析):

2. 代码案例:

(1)工程一览图,如下:

(2)activity_main.xml:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.himi.oauthdemo.MainActivity" >
<Button
android:id="@+id/btn_oauth"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Baidu OAuth"
android:onClick="onClickOAuth"/> <TextView
android:id="@+id/tv_access_token"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" /> <Button
android:id="@+id/btn_get_user_info"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Baidu Get User Info"
android:onClick="onClickGetUserInfo"/> <TextView
android:id="@+id/tv_result"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" /> </LinearLayout>

布局效果,如下:

(3)MainActivity.java:

 package com.jikexueyuan.oauth;

 import java.io.IOException;

 import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast; import com.baidu.api.AsyncBaiduRunner;
import com.baidu.api.AsyncBaiduRunner.RequestListener;
import com.baidu.api.Baidu;
import com.baidu.api.BaiduDialog.BaiduDialogListener;
import com.baidu.api.BaiduDialogError;
import com.baidu.api.BaiduException;
import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName; public class MainActivity extends Activity { private TextView mTvAccessToken = null;
private TextView mTvResult = null;
private TextView mTvResultUser = null; private Baidu mBaidu = null;
private Gson mGson = null; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mBaidu = new Baidu("V3VW2ulGTGbTM32pXyAs7fvY", this);
mGson = new Gson();
setContentView(R.layout.activity_main);
mTvAccessToken = (TextView)findViewById(R.id.tv_access_token);
mTvResult= (TextView)findViewById(R.id.tv_result);
mTvResultUser= (TextView)findViewById(R.id.tv_result_user);
} public void OnClickOAuth(View v) {
mBaidu.authorize(this, true, true, new BaiduDialogListener() { @Override
public void onError(BaiduDialogError arg0) {
refreshUI("error");
} @Override
public void onComplete(Bundle arg0) {
refreshUI(mBaidu.getAccessToken());
} @Override
public void onCancel() {
refreshUI("cancel");
} @Override
public void onBaiduException(BaiduException arg0) {
refreshUI("exception");
}
});
} public void OnClickGetUserInfo(View v) {
String token = mBaidu.getAccessToken();
if(TextUtils.isEmpty(token)) {
Toast.makeText(this, "Token is null", Toast.LENGTH_SHORT).show();
} else {
AsyncBaiduRunner runner = new AsyncBaiduRunner(mBaidu);
String url = "https://openapi.baidu.com/rest/2.0/passport/users/getInfo";
runner.request(url, null, "GET", new RequestListener() { @Override
public void onIOException(IOException arg0) {
refreshResultUI("onIOException");
} @Override
public void onComplete(String json) {
refreshResultUI(json);
} @Override
public void onBaiduException(BaiduException arg0) {
refreshResultUI("onBaiduException");
}
});
/**
new Thread(){
public void run() {
String url = "https://openapi.baidu.com/rest/2.0/passport/users/getInfo";
try {
final String jsonText = mBaidu.request(url, null, "GET");
// final UserEntity user = mGson.fromJson(jsonText, UserEntity.class);
final UserEntity user = mGson.fromJson(jsonText, new TypeToken<UserEntity>(){}.getType());
runOnUiThread(new Runnable() { @Override
public void run() {
mTvResult.setText(jsonText);
mTvResultUser.setText(mGson.toJson(user));
}
});
} catch (IOException e) {
e.printStackTrace();
} catch (BaiduException e) {
e.printStackTrace();
}
}
}.start();
**/
}
} private void refreshResultUI(final String msg) {
runOnUiThread(new Runnable() { @Override
public void run() {
mTvResultUser.setText(msg);
}
});
}
private void refreshUI(final String msg) {
runOnUiThread(new Runnable() { @Override
public void run() {
mTvAccessToken.setText(msg);
}
});
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} @Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
} class UserEntity {
private String userid;
private String blood;
@SerializedName("username")
private String name;
public String getUserid() {
return userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
public String getBlood() {
return blood;
}
public void setBlood(String blood) {
this.blood = blood;
}
public String getName() {
return name;
}
public void setName(String username) {
this.name = username;
} }
}

与此同时AndroidMainfest.xml,如下:

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.jikexueyuan.oauth"
android:versionCode="1"
android:versionName="1.0" > <uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="21" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application> </manifest>

Java基础知识强化之网络编程笔记22:Android网络通信之 Android常用OAuth登录(获取个人信息)的更多相关文章

  1. Java基础知识强化之网络编程笔记23:Android网络通信之 Volley(Google开源网络通信库)

    联合网上资料学习:http://www.open-open.com/lib/view/open1451223702339.html 一.Volley的介绍 1. Volley简介 在这之前,我们在程序 ...

  2. Java基础知识强化之网络编程笔记21:Android网络通信之 Android常用OAuth登录(获取令牌信息)

    1. 首先我们去下载开发相关SDK(Android): 下载百度使用OAuth的SDK(Android),如下: 下载链接为:http://developer.baidu.com/wiki/index ...

  3. Java基础知识强化之网络编程笔记15:Android网络通信之 Android异步任务处理(AsyncTask使用)

         AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的 ...

  4. Java基础知识强化之网络编程笔记18:Android网络通信之 使用HttpClient的Post / Get 方式读取网络数据(基于HTTP通信技术)

    使用HttpClient进行Get方式通信,通过HttpClient建立网络链接,使用HttpGet方法读取数据,并且通过Response获取Entity返回值. 使用HttpClient进行Post ...

  5. Java基础知识强化之网络编程笔记17:Android网络通信之 使用Http的Post方式读取网络数据(基于HTTP通信技术)

    使用Http的Post方式与网络交互通信.Post方式需要向网络传输一部分数据,同时具有输入流和输出流. 详见:Android(java)学习笔记210:采用post请求提交数据到服务器(qq登录案例 ...

  6. Java基础知识强化之网络编程笔记16:Android网络通信之 使用Http的Get方式读取网络数据(基于HTTP通信技术)

    使用Http的Get方式读取网络数据,使用Get方式与网络通信是最常见的Http通信,建立链接之后就可以通过输入流读取网络数据. 详见:Android(java)学习笔记209:采用get请求提交数据 ...

  7. Java基础知识强化之网络编程笔记19:Android网络通信之 HttpClient和传统Post、Get方式的区别

    1. HttpClient是什么 ?     HTTP 协议可能是现在 Internet 上使用得最多.最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源.虽然在 ...

  8. Java基础知识强化之网络编程笔记01:InetAddress类的概述和使用

    1. InetAddress类 InetAddress是Java对IP地址的封装,在java.net中有许多类都使用到了InetAddress,包括ServerSocket,Socket,Datagr ...

  9. Java基础知识强化之网络编程笔记25:Android网络通信之 Future接口介绍(Java程序执行超时)

    1. Future接口简介 在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现. Future接口是Java标准API ...

随机推荐

  1. 自定义Sharepoint的登陆页面

    转:http://www.cnblogs.com/jecoso/archive/2008/05/25/1207151.html 原文作者:Damon Armstrong 原文地址:http://www ...

  2. [转] This function or variable may be unsafe

    原文:This function or variable may be unsafe,他大姨妈 错误提示: [Error]'fopen' This function or variable may b ...

  3. 树-伸展树(Splay Tree)

    伸展树概念 伸展树(Splay Tree)是一种二叉排序树,它能在O(log n)内完成插入.查找和删除操作.它由Daniel Sleator和Robert Tarjan创造. (01) 伸展树属于二 ...

  4. 网页推送库 SignalR

    SignalR 可以用这个库开发网页聊天室应用 ASP.NET SignalR 是为 ASP.NET 开发人员提供的一个库,可以简化开发人员将实时 Web 功能添加到应用程序的过程.实时 Web 功能 ...

  5. Ngrok,一款可以帮助你展示网站和联网开发的工具

      使用Ngrok的目的就是为了可以让别人通过网络访问到自己本机上的项目 下面是一个简单的使用教程,详细的查看官网英文文档. 第一步: 登录官网:https://ngrok.com/   注册或者登录 ...

  6. EXCEL 操作

    1.为几万行数据加序号 先在A1,A2分别输入1,2,选中A1:A2,双击A2右下角那个小方块. 数据有多少行就会自动填充多少行(要求:B列数据连续) 2.统计一列中单元格的值等于某个值的单元格的个数 ...

  7. QQMusic绿钻兄,你可安好?我需要晴天。

    不好意思,年纪这样大了,还依靠吐槽来保持呆毛的正能量,实在对不住,先说对不起. QQMusic是我最喜欢的腾讯增值服务,正版内容,海量歌手,高清下载.实在是音乐软件中高大上的典范,除了歌手排名中前十中 ...

  8. 问题-File not "controls.res"(XE2+Win7虚拟机)

    问题现象:我在Win7的虚拟机中安装XE2,前提是原来的系统上有D2007,安装后,新建个工程,F9报"File not controls.res".百思不得其解. 问题原因:因为 ...

  9. delphi 调用 webservice (.NET C#版)

    uses XMLIntf, XMLDoc; XML to XTR文件转换 .File-->open打开你要分析的XML文件 .在左边选择你要分析的接点,双击加到中间的转换列表中 .Create- ...

  10. hdoj 5194 DZY Loves Balls【规律&&gcd】

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5194 题意:给你n个黑球,m个白球,每次从中随机抽取一个,如果抽到黑球记为1如果抽出来白球记为0,让你 ...