微博登录以及获取用户信息

  1. public class WbMainAct extends FinalActivity {  
  2.     // @ViewInject(id = R.id.login_out_button_silver, click = "myClick")  
  3.     LoginoutButton oauthButton;  
  4.     // @ViewInject(id = R.id.mytv)  
  5.     TextView textView;  
  6.     AuthInfo authInfo;  
  7.     @ViewInject(id = R.id.user, click = "getUser")  
  8.     Button userButton;  
  9.     @ViewInject(id = R.id.userInfo)  
  10.     TextView userTextView;  
  11.     UsersAPI userAPI;  
  12.     private Oauth2AccessToken mAccessToken;  
  13.   
  14.     @Override  
  15.     protected void onCreate(Bundle savedInstanceState) {  
  16.         // TODO Auto-generated method stub  
  17.         super.onCreate(savedInstanceState);  
  18.         setContentView(R.layout.oauthlay);  
  19.         authInfo = new AuthInfo(getApplicationContext(), Constants.APP_KEY,  
  20.                 Constants.REDIRECT_URL, Constants.SCOPE);  
  21.         oauthButton = (LoginoutButton) findViewById(R.id.login_out_button_default);  
  22.         textView = (TextView) findViewById(R.id.mytv);  
  23.         oauthButton.setWeiboAuthInfo(authInfo, new AuthListener());  
  24.         oauthButton.setLogoutListener(new LogOutRequestListener());  
  25.         final Button logoutButton = (Button) findViewById(R.id.logout_button);  
  26.   
  27.         logoutButton.setOnClickListener(new OnClickListener() {  
  28.             @Override  
  29.             public void onClick(View v) {  
  30.                 Toast.makeText(WbMainAct.this"onClick", Toast.LENGTH_SHORT)  
  31.                         .show();  
  32.                 new LogoutAPI(WbMainAct.this, Constants.APP_KEY,  
  33.                         AccessTokenKeeper.readAccessToken(WbMainAct.this))  
  34.                         .logout(new LogOutRequestListener());  
  35.             }  
  36.         });  
  37.   
  38.     }  
  39.   
  40.     public void getUser(View v) {  
  41.         mAccessToken = AccessTokenKeeper.readAccessToken(this);  
  42.         userAPI = new UsersAPI(this, Constants.APP_KEY, mAccessToken);  
  43.         if (mAccessToken != null && mAccessToken.isSessionValid()) {  
  44.             long uid = Long.parseLong(mAccessToken.getUid());  
  45.             userAPI.show(uid, mListener);  
  46.   
  47.         } else {  
  48.   
  49.             Toast.makeText(WbMainAct.this,  
  50.                     R.string.weibosdk_demo_access_token_is_empty,  
  51.                     Toast.LENGTH_LONG).show();  
  52.             userTextView  
  53.                     .setText((mAccessToken == null) ? "mAccessToken = null "  
  54.                             + mAccessToken.isSessionValid()  
  55.                             : "mAccessToken != null "  
  56.                                     + mAccessToken.isSessionValid());  
  57.         }  
  58.     }  
  59.   
  60.     private RequestListener mListener = new RequestListener() {  
  61.         @Override  
  62.         public void onComplete(String response) {  
  63.             if (!TextUtils.isEmpty(response)) {  
  64.   
  65.                 // 调用 User#parse 将JSON串解析成User对象  
  66.                 User user = User.parse(response);  
  67.                 if (user != null) {  
  68.                     Toast.makeText(WbMainAct.this,  
  69.                             "获取User信息成功,用户昵称:" + user.screen_name,  
  70.                             Toast.LENGTH_LONG).show();  
  71.                     userTextView.setText(user.screen_name);  
  72.                 } else {  
  73.                     userTextView.setText(response);  
  74.   
  75.                     Toast.makeText(WbMainAct.this"2:" + response,  
  76.                             Toast.LENGTH_LONG).show();  
  77.                 }  
  78.             }  
  79.         }  
  80.   
  81.         @Override  
  82.         public void onWeiboException(WeiboException e) {  
  83.   
  84.             ErrorInfo info = ErrorInfo.parse(e.getMessage());  
  85.             Toast.makeText(WbMainAct.this"3:" + info.toString(),  
  86.                     Toast.LENGTH_LONG).show();  
  87.             userTextView.setText(info.toString());  
  88.         }  
  89.     };  
  90.   
  91.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
  92.         super.onActivityResult(requestCode, resultCode, data);  
  93.   
  94.         //  
  95.         if (oauthButton != null) {  
  96.             oauthButton.onActivityResult(requestCode, resultCode, data);  
  97.         }  
  98.   
  99.           
  100.     }  
  101.   
  102.     private class LogOutRequestListener implements RequestListener {  
  103.         @Override  
  104.         public void onComplete(String response) {  
  105.             if (!TextUtils.isEmpty(response)) {  
  106.                 try {  
  107.                     JSONObject obj = new JSONObject(response);  
  108.                     String value = obj.getString("result");  
  109.   
  110.                     if ("true".equalsIgnoreCase(value)) {  
  111.                         AccessTokenKeeper.clear(WbMainAct.this);  
  112.                         textView.setText(R.string.weibosdk_demo_logout_success);  
  113.                     }  
  114.                 } catch (JSONException e) {  
  115.                     e.printStackTrace();  
  116.                 }  
  117.             }  
  118.         }  
  119.   
  120.         @Override  
  121.         public void onWeiboException(WeiboException e) {  
  122.             textView.setText(R.string.weibosdk_demo_logout_failed);  
  123.         }  
  124.     }  
  125.   
  126.     private class AuthListener implements WeiboAuthListener {  
  127.         @Override  
  128.         public void onComplete(Bundle values) {  
  129.             Toast.makeText(WbMainAct.this"onComplete", Toast.LENGTH_SHORT)  
  130.                     .show();  
  131.             Oauth2AccessToken accessToken = Oauth2AccessToken  
  132.                     .parseAccessToken(values);  
  133.   
  134.             if (accessToken != null && accessToken.isSessionValid()) {  
  135.                 String date = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss")  
  136.                         .format(new java.util.Date(accessToken.getExpiresTime()));  
  137.                 String format = getString(R.string.weibosdk_demo_token_to_string_format_1);  
  138.                 textView.setText(String.format(format, accessToken.getToken(),  
  139.                         date));  
  140.   
  141.                 AccessTokenKeeper.writeAccessToken(getApplicationContext(),  
  142.                         accessToken);  
  143.             }  
  144.         }  
  145.   
  146.         @Override  
  147.         public void onWeiboException(WeiboException e) {  
  148.             Toast.makeText(WbMainAct.this, e.getMessage(), Toast.LENGTH_SHORT)  
  149.                     .show();  
  150.         }  
  151.   
  152.         @Override  
  153.         public void onCancel() {  
  154.             Toast.makeText(WbMainAct.this,  
  155.                     R.string.weibosdk_demo_toast_auth_canceled,  
  156.                     Toast.LENGTH_SHORT).show();  
  157.         }  
  158.     }  
  159.   
  160. }  

常量类,根据实际情况替换相关数据

[java]  view plain copy
  1. public interface Constants {  
  2.   
  3.     public static final String APP_KEY = "1530318928";  
  4.   
  5.     public static final String REDIRECT_URL = "http://open.weibo.com/apps/1530318928/info/advanced";  
  6.   
  7.     public static final String SCOPE = "email,direct_messages_read,direct_messages_write,"  
  8.             + "friendships_groups_read,friendships_groups_write,statuses_to_me_read,"  
  9.             + "follow_app_official_microblog," + "invitation_write";  
  10. }  
工具类,保持从服务器返回的token信息
[java]  view plain copy
  1. public class AccessTokenKeeper {  
  2.     private static final String PREFERENCES_NAME = "com_weibo_sdk_android";  
  3.   
  4.     private static final String KEY_UID           = "uid";  
  5.     private static final String KEY_ACCESS_TOKEN  = "access_token";  
  6.     private static final String KEY_EXPIRES_IN    = "expires_in";  
  7.       
  8.     /** 
  9.      * 保存 Token 对象到 SharedPreferences。 
  10.      *  
  11.      * @param context 应用程序上下文环境 
  12.      * @param token   Token 对象 
  13.      */  
  14.     public static void writeAccessToken(Context context, Oauth2AccessToken token) {  
  15.         if (null == context || null == token) {  
  16.             return;  
  17.         }  
  18.           
  19.         SharedPreferences pref = context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_APPEND);  
  20.         Editor editor = pref.edit();  
  21.         editor.putString(KEY_UID, token.getUid());  
  22.         editor.putString(KEY_ACCESS_TOKEN, token.getToken());  
  23.         editor.putLong(KEY_EXPIRES_IN, token.getExpiresTime());  
  24.         editor.commit();  
  25.     }  
  26.   
  27.     /** 
  28.      * 从 SharedPreferences 读取 Token 信息。 
  29.      *  
  30.      * @param context 应用程序上下文环境 
  31.      *  
  32.      * @return 返回 Token 对象 
  33.      */  
  34.     public static Oauth2AccessToken readAccessToken(Context context) {  
  35.         if (null == context) {  
  36.             return null;  
  37.         }  
  38.           
  39.         Oauth2AccessToken token = new Oauth2AccessToken();  
  40.         SharedPreferences pref = context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_APPEND);  
  41.         token.setUid(pref.getString(KEY_UID, ""));  
  42.         token.setToken(pref.getString(KEY_ACCESS_TOKEN, ""));  
  43.         token.setExpiresTime(pref.getLong(KEY_EXPIRES_IN, 0));  
  44.         return token;  
  45.     }  
  46.   
  47.     /** 
  48.      * 清空 SharedPreferences 中 Token信息。 
  49.      *  
  50.      * @param context 应用程序上下文环境 
  51.      */  
  52.     public static void clear(Context context) {  
  53.         if (null == context) {  
  54.             return;  
  55.         }  
  56.           
  57.         SharedPreferences pref = context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_APPEND);  
  58.         Editor editor = pref.edit();  
  59.         editor.clear();  
  60.         editor.commit();  
  61.     }  
  62. }  

你可能感兴趣的:(微博登录以及获取用户信息)