• Java基础知识强化之网络编程笔记22:Android网络通信之 Android常用OAuth登录(获取个人信息)


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

    2. 代码案例:

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

    (2)activity_main.xml:

     1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2     xmlns:tools="http://schemas.android.com/tools"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     android:orientation="vertical"
     6     tools:context="com.himi.oauthdemo.MainActivity" >
     7     <Button
     8         android:id="@+id/btn_oauth"
     9         android:layout_width="wrap_content"
    10         android:layout_height="wrap_content"
    11         android:text="Baidu OAuth"
    12         android:onClick="onClickOAuth"/>
    13 
    14     <TextView
    15         android:id="@+id/tv_access_token"
    16         android:layout_width="wrap_content"
    17         android:layout_height="wrap_content"
    18         android:text="@string/hello_world" />
    19     
    20     <Button
    21         android:id="@+id/btn_get_user_info"
    22         android:layout_width="wrap_content"
    23         android:layout_height="wrap_content"
    24         android:text="Baidu Get User Info"
    25         android:onClick="onClickGetUserInfo"/>
    26 
    27     <TextView
    28         android:id="@+id/tv_result"
    29         android:layout_width="wrap_content"
    30         android:layout_height="wrap_content"
    31         android:text="@string/hello_world" />
    32 
    33 </LinearLayout>

    布局效果,如下:

    (3)MainActivity.java:

      1 package com.jikexueyuan.oauth;
      2 
      3 import java.io.IOException;
      4 
      5 import android.app.Activity;
      6 import android.os.Bundle;
      7 import android.text.TextUtils;
      8 import android.view.Menu;
      9 import android.view.MenuItem;
     10 import android.view.View;
     11 import android.widget.TextView;
     12 import android.widget.Toast;
     13 
     14 import com.baidu.api.AsyncBaiduRunner;
     15 import com.baidu.api.AsyncBaiduRunner.RequestListener;
     16 import com.baidu.api.Baidu;
     17 import com.baidu.api.BaiduDialog.BaiduDialogListener;
     18 import com.baidu.api.BaiduDialogError;
     19 import com.baidu.api.BaiduException;
     20 import com.google.gson.Gson;
     21 import com.google.gson.annotations.SerializedName;
     22 
     23 public class MainActivity extends Activity {
     24     
     25     private TextView mTvAccessToken = null;
     26     private TextView mTvResult = null;
     27     private TextView mTvResultUser = null;
     28     
     29     private Baidu mBaidu = null;
     30     private Gson mGson = null;
     31 
     32     @Override
     33     protected void onCreate(Bundle savedInstanceState) {
     34         super.onCreate(savedInstanceState);
     35         mBaidu = new Baidu("V3VW2ulGTGbTM32pXyAs7fvY", this);
     36         mGson = new Gson();
     37         setContentView(R.layout.activity_main);
     38         mTvAccessToken = (TextView)findViewById(R.id.tv_access_token);
     39         mTvResult= (TextView)findViewById(R.id.tv_result);
     40         mTvResultUser= (TextView)findViewById(R.id.tv_result_user);
     41     }
     42     
     43     public void OnClickOAuth(View v) {
     44         mBaidu.authorize(this, true, true, new BaiduDialogListener() {
     45             
     46             @Override
     47             public void onError(BaiduDialogError arg0) {
     48                 refreshUI("error");
     49             }
     50             
     51             @Override
     52             public void onComplete(Bundle arg0) {
     53                 refreshUI(mBaidu.getAccessToken());
     54             }
     55             
     56             @Override
     57             public void onCancel() {
     58                 refreshUI("cancel");
     59             }
     60             
     61             @Override
     62             public void onBaiduException(BaiduException arg0) {
     63                 refreshUI("exception");
     64             }
     65         });
     66     }
     67     
     68     public void OnClickGetUserInfo(View v) {
     69         String token = mBaidu.getAccessToken();
     70         if(TextUtils.isEmpty(token)) {
     71             Toast.makeText(this, "Token is null", Toast.LENGTH_SHORT).show();
     72         } else {
     73             AsyncBaiduRunner runner = new AsyncBaiduRunner(mBaidu);
     74             String url = "https://openapi.baidu.com/rest/2.0/passport/users/getInfo";
     75             runner.request(url, null, "GET", new RequestListener() {
     76                 
     77                 @Override
     78                 public void onIOException(IOException arg0) {
     79                     refreshResultUI("onIOException");
     80                 }
     81                 
     82                 @Override
     83                 public void onComplete(String json) {
     84                     refreshResultUI(json);
     85                 }
     86                 
     87                 @Override
     88                 public void onBaiduException(BaiduException arg0) {
     89                     refreshResultUI("onBaiduException");
     90                 }
     91             });
     92             /**
     93             new Thread(){
     94                  public void run() {
     95                      String url = "https://openapi.baidu.com/rest/2.0/passport/users/getInfo";
     96                         try {
     97                             final String jsonText = mBaidu.request(url, null, "GET");
     98 //                            final UserEntity user = mGson.fromJson(jsonText, UserEntity.class);
     99                             final UserEntity user = mGson.fromJson(jsonText, new TypeToken<UserEntity>(){}.getType());
    100                             runOnUiThread(new Runnable() {
    101                                 
    102                                 @Override
    103                                 public void run() {
    104                                     mTvResult.setText(jsonText);
    105                                     mTvResultUser.setText(mGson.toJson(user));
    106                                 }
    107                             });
    108                         } catch (IOException e) {
    109                             e.printStackTrace();
    110                         } catch (BaiduException e) {
    111                             e.printStackTrace();
    112                         }
    113                  }
    114             }.start();
    115             **/
    116         }
    117     }
    118     
    119 
    120     private void refreshResultUI(final String msg) {
    121         runOnUiThread(new Runnable() {
    122             
    123             @Override
    124             public void run() {
    125                 mTvResultUser.setText(msg);
    126             }
    127         });
    128     }
    129     private void refreshUI(final String msg) {
    130         runOnUiThread(new Runnable() {
    131             
    132             @Override
    133             public void run() {
    134                 mTvAccessToken.setText(msg);
    135             }
    136         });
    137     }
    138 
    139     @Override
    140     public boolean onCreateOptionsMenu(Menu menu) {
    141         // Inflate the menu; this adds items to the action bar if it is present.
    142         getMenuInflater().inflate(R.menu.main, menu);
    143         return true;
    144     }
    145 
    146     @Override
    147     public boolean onOptionsItemSelected(MenuItem item) {
    148         // Handle action bar item clicks here. The action bar will
    149         // automatically handle clicks on the Home/Up button, so long
    150         // as you specify a parent activity in AndroidManifest.xml.
    151         int id = item.getItemId();
    152         if (id == R.id.action_settings) {
    153             return true;
    154         }
    155         return super.onOptionsItemSelected(item);
    156     }
    157     
    158     
    159     class UserEntity {
    160         private String userid;
    161         private String blood;
    162         @SerializedName("username")
    163         private String name;
    164         public String getUserid() {
    165             return userid;
    166         }
    167         public void setUserid(String userid) {
    168             this.userid = userid;
    169         }
    170         public String getBlood() {
    171             return blood;
    172         }
    173         public void setBlood(String blood) {
    174             this.blood = blood;
    175         }
    176         public String getName() {
    177             return name;
    178         }
    179         public void setName(String username) {
    180             this.name = username;
    181         }
    182         
    183     }
    184 }

    与此同时AndroidMainfest.xml,如下:

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     3     package="com.jikexueyuan.oauth"
     4     android:versionCode="1"
     5     android:versionName="1.0" >
     6 
     7     <uses-sdk
     8         android:minSdkVersion="8"
     9         android:targetSdkVersion="21" />
    10     <uses-permission android:name="android.permission.INTERNET" />
    11     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    12     
    13     <application
    14         android:allowBackup="true"
    15         android:icon="@drawable/ic_launcher"
    16         android:label="@string/app_name"
    17         android:theme="@style/AppTheme" >
    18         <activity
    19             android:name=".MainActivity"
    20             android:label="@string/app_name" >
    21             <intent-filter>
    22                 <action android:name="android.intent.action.MAIN" />
    23 
    24                 <category android:name="android.intent.category.LAUNCHER" />
    25             </intent-filter>
    26         </activity>
    27     </application>
    28 
    29 </manifest>
  • 相关阅读:
    struct和typedef struct彻底明白了
    jsoncpp使用
    JsonCpp使用注意
    vscode 远程 Linux 开发环境搭建
    Ubuntu 更换国内源
    java~PECS原则
    DLL劫持——DLL sideloading 这玩意从EDR检测厂商看,就S1有防护能力
    apache jmeter报告模板
    http压测工具 jmeter 安装配置
    golang项目部署
  • 原文地址:https://www.cnblogs.com/hebao0514/p/4890350.html
Copyright © 2020-2023  润新知