前言:由于有很多博客都已经很详细的写过了这方面的东西就不重复了,本篇博客为了记录下自己遇到的坑,所以直接上代码.不便之处,敬请谅解!
@Event( R.id.iv_qq)
private void onThreeAccountlogin(View view) {
switch (view.getId()) {
case R.id.iv_qq:
qqLogin();
break;
}
private void qqLogin() {
if (App.mTencent.isQQInstalled(this)) {
qqCallback = new BaseUiListener();
App.mTencent.login(this, "all", qqCallback);
}else {
Toast.makeText(this, "用户未安装QQ", Toast.LENGTH_SHORT).show();
}
}
private class BaseUiListener implements IUiListener {
@Override
public void onComplete(final Object response) {
// Toast.makeText(getApplicationContext(), "授权成功", Toast.LENGTH_SHORT).show();
/**到此已经获得OpneID以及其他你想获得的内容了
QQ登录成功了,我们还想获取一些QQ的基本信息,比如昵称,头像什么的,这个时候怎么办?
sdk给我们提供了一个类UserInfo,这个类中封装了QQ用户的一些信息,我么可以通过这个类拿到这些信息
*/
LogUtil.i(TAG, "response="+response.toString());
try {
JSONObject obj = (JSONObject) response;
String openID = obj.getString("openid");
String accessToken = obj.getString("access_token");
String expires = obj.getString("expires_in");
App.mTencent.setOpenId(openID);
App.mTencent.setAccessToken(accessToken,expires);
} catch (JSONException e) {
e.printStackTrace();
}
QQToken qqToken = App.mTencent.getQQToken();
mUserInfo = new UserInfo(getApplicationContext(),qqToken);
mUserInfo.getUserInfo(new IUiListener() {
@Override
public void onComplete(Object o) {
try{
//用户信息获取到了
LogUtil.i(TAG, "JSONObject========"+ ((JSONObject) o).toString());
RequestParams params = new RequestParams(APIConstant.THIRDLOGIN);
//调用自己后台接口
params.addQueryStringParameter("type", UserConstant.TYPE_QQ);
params.addQueryStringParameter("id", ((JSONObject) response).getString("openid"));//id为openid
params.addQueryStringParameter("nickname", ((JSONObject) o).getString("nickname"));
params.addQueryStringParameter("headImg",((JSONObject) o).getString("figureurl_qq_2"));
params.addQueryStringParameter("token", StringUtil.getEncryptionContent(params));
LogUtil.i(TAG, "params="+params.toString());
x.http().post(params, new Callback.CommonCallback<String>() {
@Override
public void onSuccess(String result) {
LogUtil.i(TAG, "result===="+result);
Gson gson = new Gson();
UserResult userResult = gson.fromJson(result, UserResult.class);
String msg = StringUtil.getErrorMessage(LoginActivity.this, userResult.getCode());
switch (userResult.getCode()) {
case BaseResult.SUCCESS:
UserSP.setUserInfo(getBaseContext(), gson.toJson(userResult.getData()));
App.refreshUserInfo(getBaseContext());
setResult(Activity.RESULT_OK);
Toast.makeText(x.app(), getString(R.string.login_succee), Toast.LENGTH_LONG).show();
Intent intent1 = new Intent(LoginActivity.this, MainActivity.class);
startActivity(intent1);
finish();
overridePendingTransition(R.anim.slide_right_in,R.anim.slide_left_out);
break;
default:
Toast.makeText(x.app(), msg, Toast.LENGTH_LONG).show();
break;
}
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
LogUtil.i(TAG, "ex="+ex.toString());
Toast.makeText(x.app(), ex.getMessage(), Toast.LENGTH_LONG).show();
}
@Override
public void onCancelled(CancelledException cex) {
Toast.makeText(x.app(), "cancelled", Toast.LENGTH_LONG).show();
}
@Override
public void onFinished() {
if (progress != null) {
progress.dismiss();
}
}
});
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onError(UiError uiError) {
LogUtil.i(TAG,"登录失败"+uiError.errorMessage);
}
@Override
public void onCancel() {
LogUtil.i(TAG,"登录取消");
}
});
}
@Override
public void onError(UiError uiError) {
LogUtil.i(TAG,".....授权失败"+uiError.errorMessage);
}
@Override
public void onCancel() {
LogUtil.i(TAG,".....授权取消");
}
}
ps:错误返回码链接
公共返回码说明