Android-QQ登录_不务正业的土豆的博客-程序员ITS203

技术标签: Android  

1.首先,当然是在腾讯开放平台(http://open.qq.com/)注册成为开发者,然后获取APP ID
2.把open-sdk.jar拷贝到libs(或lib)目录下
(下载地址:http://wiki.open.qq.com/wiki/mobile/SDK%E4%B8%8B%E8%BD%BD

3.配置AndroidManifest

<uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
                <!-- 从QQ登录中copy的代码-->
        <activity
            android:name="com.tencent.tauth.AuthActivity"
            android:launchMode="singleTask"
            android:noHistory="true">
            <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="tencent1105546048" />
            </intent-filter>
        </activity>



<activity android:name="com.tencent.connect.common.AssistActivity" android:configChanges="orientation|keyboardHidden|screenSize" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
------------------------------------------------------------------------

4.创建实例  
声明

//    QQ登录相关
private static final String QQAPPID = "1106263164";
    private Tencent mTencent;
    private IUiListener loginListener;
    private IUiListener userInfoListener;
    private String scope;
    private UserInfo userInfo;
    ImageView img_login_qq;

初始化

//          QQ登录相关
        mTencent = Tencent.createInstance(QQAPPID, LoginActivity.this);
        scope = "all";
        initLoginListener();
        initUserInfoListener();
        img_login_qq= (ImageView) findViewById(R.id.img_login_qq);
        img_login_qq.setOnClickListener(this);

其余见代码


/*
qq登录开始
 */
private void qqLogin() {
    if (!mTencent.isSessionValid()) {
        mTencent.login(LoginActivity.this, scope, loginListener);

    }
}
private void initLoginListener() {
    loginListener = new IUiListener() {
        /**
         * {"ret":0,"pay_token":"D3D678728DC580FBCDE15722B72E7365",
         * "pf":"desktop_m_qq-10000144-android-2002-",
         * "query_authority_cost":448,
         * "authority_cost":-136792089,
         * "openid":"015A22DED93BD15E0E6B0DDB3E59DE2D",
         * "expires_in":7776000,
         * "pfkey":"6068ea1c4a716d4141bca0ddb3df1bb9",
         * "msg":"",
         * "access_token":"A2455F491478233529D0106D2CE6EB45",
         * "login_cost":499}
         */
        @Override
        public void onComplete(Object value) {
            // TODO Auto-generated method stub
            if(value==null){
                Toast.makeText(getApplicationContext(),"返回结果为空",Toast.LENGTH_LONG).show();
                return;
            }
            System.out.println("有数据返回..");
            try {
                JSONObject jo = (JSONObject) value;
                if(null!=jo&&jo.length()==0){
                    Toast.makeText(getApplicationContext(),"返回结果为空",Toast.LENGTH_LONG).show();
                }
                //处理结果
                System.out.println(jo.toString());

                String msg = jo.getString("msg");
                int ret = jo.getInt("ret");

                System.out.println("json=" + String.valueOf(jo));


                System.out.println("json=" + String.valueOf(jo));

                System.out.println("msg="+msg);
                if (ret == 0) {
                    String openID = jo.getString("openid");
                    String accessToken = jo.getString("access_token");
                    String expires = jo.getString("expires_in");
                    //下面两个方法非常重要,否则会出现client request's parameters are invalid, invalid openid
                    mTencent.setOpenId(openID);
                    mTencent.setAccessToken(accessToken, expires);


                    System.out.println("开始获取用户信息");
                    if(mTencent.getQQToken() == null){
                        System.out.println("qqtoken ====================== null");
                    }

                    userInfo = new UserInfo(LoginActivity.this, mTencent.getQQToken());
                    userInfo.getUserInfo(userInfoListener);
                }
//                  if (ret == 0) {
    
//                      Toast.makeText(MainActivity.this, "登录成功",
//                              Toast.LENGTH_LONG).show();
//
//                      String openID = jo.getString("openid");
//                      String accessToken = jo.getString("access_token");
//                      String expires = jo.getString("expires_in");
//                      mTencent.setOpenId(openID);
//                      mTencent.setAccessToken(accessToken, expires);
//                  }

            } catch (Exception e) {
                // TODO: handle exception
            }

        }


        @Override
        public void onError(UiError uiError) {
            Toast.makeText(getApplicationContext(),"登录错误",Toast.LENGTH_LONG).show();
        }

        @Override
        public void onCancel() {
            // TODO Auto-generated method stub
            Toast.makeText(getApplicationContext(),"登录取消",Toast.LENGTH_LONG).show();
        }
    };
}


    private void initUserInfoListener() {
        userInfoListener = new IUiListener() {

            @Override
            public void onError(UiError arg0) {
                // TODO Auto-generated method stub
                System.out.print(arg0.toString());
            }

            @Override
            public void onCancel() {
                // TODO Auto-generated method stub
                System.out.print("cancel");
            }
            /**
             * {"is_yellow_year_vip":"0","ret":0,
             * "figureurl_qq_1":"http:\/\/q.qlogo.cn\/qqapp\/1104732758\/015A22DED93BD15E0E6B0DDB3E59DE2D\/40",
             * "figureurl_qq_2":"http:\/\/q.qlogo.cn\/qqapp\/1104732758\/015A22DED93BD15E0E6B0DDB3E59DE2D\/100",
             * "nickname":"攀爬←蜗牛","yellow_vip_level":"0","is_lost":0,"msg":"",
             * "city":"黄冈","
             * figureurl_1":"http:\/\/qzapp.qlogo.cn\/qzapp\/1104732758\/015A22DED93BD15E0E6B0DDB3E59DE2D\/50",
             * "vip":"0","level":"0",
             * "figureurl_2":"http:\/\/qzapp.qlogo.cn\/qzapp\/1104732758\/015A22DED93BD15E0E6B0DDB3E59DE2D\/100",
             * "province":"湖北",
             * "is_yellow_vip":"0","gender":"男",
             * "figureurl":"http:\/\/qzapp.qlogo.cn\/qzapp\/1104732758\/015A22DED93BD15E0E6B0DDB3E59DE2D\/30"}
             */
            @Override
            public void onComplete(Object arg0) {
                // TODO Auto-generated method stub
                if(arg0 == null){
                    System.out.println("agr0=1234567null");
                    return;
                }
                try {
                    JSONObject jo = (JSONObject) arg0;
                    int ret = jo.getInt("ret");
                    System.out.println("json======" + String.valueOf(jo));
//                  String nickName=jo.getString("nickname");
//                  String gender=jo.getString("gender");
//                  System.out.println("nickname"+nickName);
//                  Toast.makeText(MainActivity.this, "你好," + nickName,
//                          Toast.LENGTH_LONG).show();
                    if(ret == 100030){
                        //权限不够,需要增量授权
                        Runnable r = new Runnable() {
                            public void run() {
                                mTencent.reAuth(LoginActivity.this, "all", new IUiListener() {

                                    @Override
                                    public void onError(UiError arg0) {
                                        // TODO Auto-generated method stub

                                    }

                                    @Override
                                    public void onComplete(Object arg0) {
                                        // TODO Auto-generated method stub

                                    }

                                    @Override
                                    public void onCancel() {
                                        // TODO Auto-generated method stub

                                    }
                                });
                            }
                        };

                        LoginActivity.this.runOnUiThread(r);
                    }else{
                        username = jo.getString("nickname");
//                        sex = jo.getString("gender");

                        if(isUsernameExists())
                        {

                        }
                        else {
                            new Thread(new Runnable() {
                                @Override
                                public void run() {
//                                    connectToRegister();
                                }
                            }).start();

                        }


                        Intent intent=new Intent(LoginActivity.this, MainActivity.class);

                        Toast.makeText(LoginActivity.this,username+",欢迎你", Toast.LENGTH_LONG).show();
                        Intent intent_service=new Intent(LoginActivity.this, SaveUsersService.class);

                        startActivity(intent);
                        finish();


                        //   Toast.makeText(LoginActivity.this, "你好," + username, Toast.LENGTH_LONG).show();
                    }

                } catch (Exception e) {
                    // TODO: handle exception
                }


            }


        };
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        //由于在一些低端机器上,因为内存原因,无法返回到回调onComplete里面,是以onActivityResult的方式返回
        if(requestCode==11101&&resultCode==RESULT_OK){
            //处理返回的数据/
            if(data==null){
                Toast.makeText(getApplicationContext(),"返回数据为空",Toast.LENGTH_LONG);
            }else{
                Tencent.handleResultData(data,loginListener);
            }
        }
        super.onActivityResult(requestCode, resultCode, data);
    }

    private String getUserId(String username) {
        String id = null;
        //打开或创建test.db数据库
        SQLiteDatabase db = openOrCreateDatabase("qingning.db", Context.MODE_PRIVATE, null);

        //打开或创建test.db数据库
        // SQLiteDatabase db = openOrCreateDatabase("test.db", Context.MODE_PRIVATE, null);
        Cursor c = db.rawQuery("select * from users where username=?",new String[]{username});
        System.out.println("username"+c.getCount());

        c.moveToFirst();
        for(int j=0;j<c.getCount();j++)
        { c.moveToPosition(j);
            id=c.getString(c.getColumnIndex("id"));
            System.out.println("id:"+id);
        }
        db.close();
        return id;
    }

    private boolean isUsernameExists(){
        //打开或创建test.db数据库
        SQLiteDatabase db = openOrCreateDatabase("qingning.db", Context.MODE_PRIVATE, null);



        Cursor c = db.rawQuery("select * from users where username=?",new String[]{username});
        if(c.getCount()==1){
            db.close();
            return true;
        }
        else{
            System.out.println("false:cccc");
            System.out.println("username"+c.getCount());
        }
        return false;
    }

    /*
    qq登录结束
     */
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yyl424525/article/details/74315732

智能推荐

终于理解~Android模块化里的资源冲突了_普通网友的博客-程序员ITS203

/ 今日科技快讯 /去哪儿数据显示,最近几天,机票瞬时搜索量增长7倍,热门目的地为三亚、成都、广州、上海、重庆、哈尔滨、长春,出发时间是春运期间的机票搜索量达疫情前水平。火车票搜索量增长5倍,热门目的地TOP5分别为成都、长沙、郑州、武汉和重庆。/ 作者简介 /本篇文章转自TechMerger的博客,文章主要分享了Android模块化中资源冲突的相关场景以及影响,相信会对大家有所帮...

PHP Warning: mysqli_connect(): The server requested authentication method unknown to the client_程序员小猪。的博客-程序员ITS203

PHP Warning: mysqli_connect(): The server requested authentication method unknown to the client [caching_sha2_password] in /usr/local/php/CreateDB.php on line 5mysql 安装了最新版本8.0.11后创建用户并授权后,授权的用户连接数据库提示The server requested authentication method unknown _1671465600

内存泄露Lowmemorykiller分析_嵌入式Linux,的博客-程序员ITS203

 01 前言最近疫苗事情非常火热,这件事情让我对刘强东有点刮目相看,我们需要更多的人关注曝光此类问题         02 正文Android Kernel 会定时执行一次检查,杀死一些进程,释放掉内存。Low memory killer 是定时进行检查。Low memory killer 主要是通过进程的oom_adj 来判定进程的重要程度。这个值越小,程序越重要,被杀的可能...

VMware Workstation16设置共享文件夹_温烟的博客-程序员ITS203_vmware workstation 共享文件夹

虚拟机安装系统:Ubuntu18.04编辑虚拟机设置选项——共享文件夹——勾选总是启用——添加选择路径(在Windows上选择要共享的文件夹)名称(在虚拟机里显示的名字)然后下一步就好了点击确定——开启虚拟机。

springboot上使用hibernate报错总结_星旅zl的博客-程序员ITS203

这两天在试用hibernate,整合入springboot是没问题了,但是具体使用就有问题,大部分应该都是下面两个问题1、required a bean of type 'org.hibernate.SessionFactory' that could not be found.2、InvalidDataAccessApiUsageException 和 Write operations ...

golang(cgo)---如何在两个不同的package中使用同样的自定义数据类型?_别打名名的博客-程序员ITS203_go 不同的包使用同一个结构体

如果在两个不同的package中使用同样的自定义数据类型?这里主要针对包括在C头文件中结构体类型,如果只是在不同的go package中自定义数据类型,这个很好处理。但实际上处理的核心是一样的,下面通过两个例子来说明解决办法。测试例程目录├── include│ └── data.h└── src ├── common │ └── common.go └── ma

随便推点

Linux关闭/重启防火墙命令_触初的博客-程序员ITS203

外部经常因防火墙问题无法访问Linux中的端口,就需要放通IP或彻底关闭防火墙查看防火状态systemctl status firewalldservice iptables status暂时关闭防火墙systemctl stop firewalldservice iptables stop永久关闭防火墙systemctl disable firewalldchkconfig iptables off重启防火墙systemctl enable firewalldservic

转载自 http://blog.csdn.net/bieleyang/article/details/76973220_曲终人散开的博客-程序员ITS203

SpringMvc简单介绍下你对springMVC的理解?Spring MVC Framework有这样一些特点:它是基于组件技术的.全部的应用对象,无论控制器和视图,还是业务对象之类的都是java组件.并且和Spring提供的其他基础结构紧密集成.不依赖于Servlet API(目标虽是如此,但是在实现的时候确实是依赖于Servlet的)可以任意使用各种视

spring的DI,IOP,AOC,Spring的简单介绍_Syntactic_suger的博客-程序员ITS203_aoc和iop

回顾:1. mybatis的性能优化. 一级缓存. 减轻数据库的压力. 默认开启. 一级缓存是线程级别,sqlSession,缓存数据的map就放在sqlSession中的PerpetualCache的中. 一级缓存是通过SimpleExecutor去执行. 在去数据库查询之前,先去一级缓存的map中尝试获取数据mapperId + mapper全路径 + sql + 占位...

Android7.0 以上Charles抓取HTTPS包解决方法_一只没有胡须的小猫咪的博客-程序员ITS203

Android7.0 以上Charles抓取HTTPS包解决方法经过俺多天的努力,终于找到了Charles抓取HTTPS接口的解决方法下载VritualXposed apk包安装到android手机链接:https://pan.baidu.com/s/1reFsjoHdXETHp6zo78Deow提取码:suns下载JustTrustMe apk包安装到android手机链接:https://pan.baidu.com/s/1reFsjoHdXETHp6zo78Deow提取码:suns安装完

易写易库(EXEK)玩“花”儿之四:英文关键字支持库,附图_Liigo的博客-程序员ITS203_易语言关键字 用英文写

英文关键字支持库,为易语言提供 if switch while for continue break return 等英文形式的流程控制语句,其功能和用法与易语言核心库中相关命令完全等同。使用本支持库编写的易语言程序,运行时不需要依赖本支持库文件。使用“易写易库(EXEK)”开发,作者liigo。下载英文关键字支持库(压缩包20KB,解压后支持库62KB)。此支持库已经过“斩月”处理,可在易语

查看堆栈信息_翻滚啊牛宝宝的博客-程序员ITS203

本文不做说明,记录工作上内存泄漏相关定位工具生成堆栈文件通过jdk自带工具生成,线上使用的时候执行的时候提示找不到pid对应的文件,加上-F参数可以强制关联上jmap -F -dump:format=b,file=d:\dump\heap.hprof &lt;pid&gt;下面这个没有使用过,目测可以jcmd &lt;pid&gt; GC.heap_dump d:\dump\h...

推荐文章

热门文章

相关标签