zoukankan      html  css  js  c++  java
  • android开发我的新浪微博客户端用户授权页面功能篇(3.2)

      ==》

          在上一篇实现了用户授权页面的UI,如上图,接下来要做的就是在这个基础上完成功能部分真正实现用户的授权认证,这一篇是android开发我的新浪微博客户端-OAuth篇(2.1)的具体应用篇原理就不多解释了不懂的看OAuth篇即可。认证过程从点击开始按钮然后跳转到新浪的授权页面,接着用户在新浪的页面里输入自己的账户和密码确定后返回用户授权页面。首先给开始按钮添加点击事件代码,代码中主要是调用我们前面android开发我的新浪微博客户端-OAuth篇(2.1)完成的OAuth类的RequestAccessToken方法用来获取oauth_verifier,具体代码如下:

    代码
    ImageButton stratBtn=(ImageButton)diaView.findViewById(R.id.btn_start);
            stratBtn.setOnClickListener(
    new OnClickListener(){

                @Override
                
    public void onClick(View arg0) {
                    auth
    =new OAuth();
                    auth.RequestAccessToken(AuthorizeActivity.
    this, CallBackUrl);
                }
                
            });

          上面的代码中重点来说明一下 RequestAccessToken方法的第二参数CallBackUrl,这个参数是用户在新浪的页面中输入账户密码后完成认证后返回的地址,我这里是这样设置的CallBackUrl = "myapp://AuthorizeActivity",在AndroidManifest.xml中配置给AuthorizeActivity添加如下配置把myapp://AuthorizeActivity指向到AuthorizeActivity,这样当页面返回到AuthorizeActivity中就可以获取到传过来的oauth_verifier参数。

    代码
    <intent-filter>
            
    <action android:name="android.intent.action.VIEW" />
            
    <category android:name="android.intent.category.DEFAULT" />
            
    <category android:name="android.intent.category.BROWSABLE" />
            
    <data android:scheme="myapp" android:host="AuthorizeActivity" /> 
    </intent-filter>

         再AuthorizeActivity如果来接收返回的oauth_verifier参数呢?接下来在AuthorizeActivity添加如下方法:

    @Override
    protected void onNewIntent(Intent intent) {
            
    super.onNewIntent(intent);
            
    //在这里处理获取返回的oauth_verifier参数
    }

     

        关于onNewIntent的说明是这样的,onCreate是用来创建一个Activity也就是创建一个窗体,但一个Activty处于任务栈的顶端,若再次调用startActivity去创建它,则不会再次创建。若你想利用已有的Acivity去处理别的Intent时,你就可以利用onNewIntent来处理。在onNewIntent里面就会获得新的Intent,在这里AuthorizeActivity是属于已有的Acivity,所以需要onNewIntent来处理接收返回的参数,获取oauth_verifier参数后OAuth还没有结束从android开发我的新浪微博客户端-OAuth篇(2.1)描述来看还需要进行根据这个参数继续向新浪微博请求获取User_id、Access Token和Access Secret,在这里我把这些操作全部写在了GetAccessToken方法中。在onNewIntent添加如下代码:

    代码
    UserInfo user= auth.GetAccessToken(intent);
    if(user!=null){
                DataHelper helper
    =new DataHelper(this);
                String uid
    =user.getUserId();
                
    if(helper.HaveUserInfo(uid))
                {
                    helper.UpdateUserInfo(user);
                    Log.e(
    "UserInfo""update");
                }
    else
                {
                    helper.SaveUserInfo(user);
                    Log.e(
    "UserInfo""add");
                }
            }

     

        通过上面的代码完成了User_id、Access Token和Access Secret 获取并且保存到了sqlite库中,这样就完成了用户的OAuth认证,当需要调用新浪的api时只需要去sqlite库中找该用户的User_id、Access Token和Access Secret 即可。到这里本篇就结束了,请关注下一篇。

  • 相关阅读:
    sqlserver中临时表、row-number、update更新自己
    easyui 实现Tooltip
    easyui 添加dialog
    转载 50种方法优化SQL Server数据库查询
    用正则将空格给去掉
    java连接redis无法连接,报异常RedisConnectionException
    springcloud的Turbine配置监控多个服务的一些坑!!!!InstanceMonitor$MisconfiguredHostException,No message available","path":"/actuator/hystrix.stream,页面不显示服务或者一直loading
    CentOS7最小化安装之后无法联网以及无法使用ifconfig以及无法使用yum安装软件
    required_new spring事务传播行为无效碰到的坑!
    推荐一下牛逼的谷歌浏览器插件!!!非常好用
  • 原文地址:https://www.cnblogs.com/top5/p/1939249.html
Copyright © 2011-2022 走看看