Java基础知识强化之网络编程笔记22:Android网络通信之 Android常用OAuth登录(获取个人信息)
2015-10-18 21:27
1156 查看
1. 获取百度个人信息(使用Gson解析):
2. 代码案例:
(1)工程一览图,如下:
(2)activity_main.xml:
布局效果,如下:
(3)MainActivity.java:
与此同时AndroidMainfest.xml,如下:
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基础知识强化之网络编程笔记21:Android网络通信之 Android常用OAuth登录(获取令牌信息)
- 网络图片的获取以及二级缓存策略(Volley框架+内存LruCache+磁盘DiskLruCache)
- 由于权限不足而无法读取配置文件出现的HTTP 500.19解决办法
- Java编写网络爬虫
- Http请求中Content-Type讲解以及在Spring MVC中的应用
- Unity3d之Http通讯GET方法和POST方法
- Unity3d之Http通讯GET方法和POST方法
- 软考(二):网络中的那些事儿
- tcpdump常用命令
- http://www.jb51.net/article/32651.htm
- 从头开始实现神经网络:入门
- HTTP请求的两种方式get和post的区别
- Java基础知识强化之网络编程笔记20:Android网络通信之 Android常用OAuth登录和分享
- error: The requested URL returned error: 403 Forbidden while accessing https://github.com/blah/blah
- 【cisco实验】练习 2.3.8: 配置基本交换机管理
- poj_2396 有上下界的网络流
- HttpClient 版本变化 转载
- TCP/IP 三次握手 四次断开
- Java基础知识强化之网络编程笔记19:Android网络通信之 HttpClient和传统Post、Get方式的区别
- 深入理解VMware虚拟网络(桥接 NAT HOST-Only)