Android-QQ登录

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登录结束
     */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值