public void login() {
// 在腾讯开放平台获取的APPID
mTencent = Tencent.createInstance("1106541335", this.getApplicationContext());
if (!mTencent.isSessionValid()) {
mTencent.login(this, Scope, listener);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Tencent.onActivityResultData(requestCode, resultCode, data, listener);
}
回调监听类
package jiyun.com.lovepet.qq;
import android.content.SharedPreferences;
import android.util.Log;
import com.google.gson.Gson;
import com.tencent.tauth.IUiListener;
import com.tencent.tauth.UiError;
import org.json.JSONObject;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import jiyun.com.lovepet.api.App;
import jiyun.com.lovepet.qq.bean.QQ;
import jiyun.com.lovepet.qq.bean.QQphoto;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
/**
* Created by DELL on 2017/12/17.
*/
public class BaseUiListener implements IUiListener {
//"https://graph.qq.com/user/get_user_info?access_token=access_token&oauth_consumer_key=1106541335&openid=openid&format=json"
private String access_token1;
private Object oauth_consumer_key;
private String openid1;
private String format;
@Override
public void onComplete(Object o) {
// mBaseMessageText.setText("onComplete:");
// mMessageText.setText(o.toString());
doComplete((JSONObject) o);
}
protected void doComplete(JSONObject values) {
// values.toString();
Log.e("doComplete: ", values.toString());
Gson gson = new Gson();
QQ qq = gson.fromJson(values.toString(), QQ.class);
String access_token = qq.getAccess_token();
SharedPreferences sharedPreferences = App.baseActivity.getSharedPreferences("user_info", 0);
SharedPreferences.Editor edit = sharedPreferences.edit();
edit.putString("access_token", access_token);
int authority_cost = qq.getAuthority_cost();
int expires_in = qq.getExpires_in();
int login_cost = qq.getLogin_cost();
String msg = qq.getMsg();
String openid = qq.getOpenid();
edit.putString("openid", openid);
String pay_token = qq.getPay_token();
String pf = qq.getPf();
String pfkey = qq.getPfkey();
int query_authority_cost = qq.getQuery_authority_cost();
int ret = qq.getRet();
//获取用户QQ信息
getQQ(access_token, openid);
}
public void getQQ(String access_token, String openid) {
StringBuffer buffer = new StringBuffer("https://graph.qq.com/user/get_user_info");
Map<String, Object> map = new HashMap<>();
map.put("access_token", access_token);
map.put("oauth_consumer_key", 1106541335);
map.put("openid", openid);
map.put("format", "json");
buffer.append("?");
for (int i = 0; i < map.size(); i++) {
access_token1 = (String) map.get("access_token");
oauth_consumer_key = map.get("oauth_consumer_key");
openid1 = (String) map.get("openid");
format = (String) map.get("format");
}
buffer.append("access_token").append("=").append(access_token1).append("&")
.append("oauth_consumer_key").append("=").append(oauth_consumer_key).append("&")
.append("openid").append("=").append(openid1).append("&")
.append("format").append("=").append(format);
final Request request = new Request.Builder()
.url(buffer.toString())
.build();
OkHttpClient okHttpClient=new OkHttpClient.Builder().build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.e("onFailure: ",e.getMessage() );
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String string = response.body().string();
if (response.code() == 200) {
Gson gson = new Gson();
QQphoto qQphoto = gson.fromJson(string, QQphoto.class);
//城市
String city = qQphoto.getCity();
Log.e("所在城市: ",city );
// 大小为30×30像素的QQ空间头像URL。
String figureurl = qQphoto.getFigureurl();
Log.e("QQ空间头像: ",figureurl );
// 大小为50×50像素的QQ空间头像URL。
String figureurl_1 = qQphoto.getFigureurl_1();
Log.e("QQ空间头像: ",figureurl_1 );
// 大小为100×100像素的QQ空间头像URL。
String figureurl_2 = qQphoto.getFigureurl_2();
Log.e("QQ空间头像: ",figureurl_2 );
// 大小为40×40像素的QQ头像URL。
String figureurl_qq_1 = qQphoto.getFigureurl_qq_1();
Log.e("QQ空间头像: ",figureurl_qq_1 );
// 大小为100×100像素的QQ头像URL。需要注意,不是所有的用户都拥有QQ的100x100的头像,但40x40像素则是一定会有
String figureurl_qq_2 = qQphoto.getFigureurl_qq_2();
Log.e("QQ空间头像: ",figureurl_qq_2 );
// 性别。 如果获取不到则默认返回"男"
String gender = qQphoto.getGender();
Log.e("性别: ",gender );
int is_lost = qQphoto.getIs_lost();
// 标识用户是否为黄钻用户(0:不是;1:是)。
String is_yellow_vip = qQphoto.getIs_yellow_vip();
// 标识是否为年费黄钻用户(0:不是; 1:是)
String is_yellow_year_vip = qQphoto.getIs_yellow_year_vip();
String level = qQphoto.getLevel();
// 用户在QQ空间的昵称。
String nickname = qQphoto.getNickname();
Log.e("昵称: ",nickname );
String province = qQphoto.getProvince();
// 返回码
int ret = qQphoto.getRet();
// 如果ret<0,会有相应的错误信息提示,返回数据全部用UTF-8编码。
String msg = qQphoto.getMsg();
// 标识用户是否为黄钻用户(0:不是;1:是)
String vip = qQphoto.getVip();
//出生在哪年
String year = qQphoto.getYear();
// 黄钻等级
String yellow_vip_level = qQphoto.getYellow_vip_level();
}
}
});
}
@Override
public void onError(UiError e) {
// showResult("onError:", "code:" + e.errorCode + ", msg:"
// + e.errorMessage + ", detail:" + e.errorDetail);
Log.e("onError:", "code:" + e.errorCode + ", msg:"
+ e.errorMessage + ", detail:" + e.errorDetail);
}
@Override
public void onCancel() {
// showResult("onCancel", "");
Log.e("onCancel: ", "");
}
}
//获取QQ信息的bean类
package jiyun.com.lovepet.qq.bean;
/**
* Created by DELL on 2017/12/18.
*/
public class QQphoto {
private int ret;
private String msg;
private int is_lost;
private String nickname;
private String gender;
private String province;
private String city;
private String year;
private String figureurl;
private String figureurl_1;
private String figureurl_2;
private String figureurl_qq_1;
private String figureurl_qq_2;
private String is_yellow_vip;
private String vip;
private String yellow_vip_level;
private String level;
private String is_yellow_year_vip;
public int getRet() {
return ret;
}
public void setRet(int ret) {
this.ret = ret;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public int getIs_lost() {
return is_lost;
}
public void setIs_lost(int is_lost) {
this.is_lost = is_lost;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getYear() {
return year;
}
public void setYear(String year) {
this.year = year;
}
public String getFigureurl() {
return figureurl;
}
public void setFigureurl(String figureurl) {
this.figureurl = figureurl;
}
public String getFigureurl_1() {
return figureurl_1;
}
public void setFigureurl_1(String figureurl_1) {
this.figureurl_1 = figureurl_1;
}
public String getFigureurl_2() {
return figureurl_2;
}
public void setFigureurl_2(String figureurl_2) {
this.figureurl_2 = figureurl_2;
}
public String getFigureurl_qq_1() {
return figureurl_qq_1;
}
public void setFigureurl_qq_1(String figureurl_qq_1) {
this.figureurl_qq_1 = figureurl_qq_1;
}
public String getFigureurl_qq_2() {
return figureurl_qq_2;
}
public void setFigureurl_qq_2(String figureurl_qq_2) {
this.figureurl_qq_2 = figureurl_qq_2;
}
public String getIs_yellow_vip() {
return is_yellow_vip;
}
public void setIs_yellow_vip(String is_yellow_vip) {
this.is_yellow_vip = is_yellow_vip;
}
public String getVip() {
return vip;
}
public void setVip(String vip) {
this.vip = vip;
}
public String getYellow_vip_level() {
return yellow_vip_level;
}
public void setYellow_vip_level(String yellow_vip_level) {
this.yellow_vip_level = yellow_vip_level;
}
public String getLevel() {
return level;
}
public void setLevel(String level) {
this.level = level;
}
public String getIs_yellow_year_vip() {
return is_yellow_year_vip;
}
public void setIs_yellow_year_vip(String is_yellow_year_vip) {
this.is_yellow_year_vip = is_yellow_year_vip;
}
}
//获取QQ id和token的bean类
package jiyun.com.lovepet.qq.bean;
/**
* Created by DELL on 2017/12/17.
*/
public class QQ {
private int ret;
private String openid;
private String access_token;
private String pay_token;
private int expires_in;
private String pf;
private String pfkey;
private String msg;
private int login_cost;
private int query_authority_cost;
private int authority_cost;
public int getRet() {
return ret;
}
public void setRet(int ret) {
this.ret = ret;
}
public String getOpenid() {
return openid;
}
public void setOpenid(String openid) {
this.openid = openid;
}
public String getAccess_token() {
return access_token;
}
public void setAccess_token(String access_token) {
this.access_token = access_token;
}
public String getPay_token() {
return pay_token;
}
public void setPay_token(String pay_token) {
this.pay_token = pay_token;
}
public int getExpires_in() {
return expires_in;
}
public void setExpires_in(int expires_in) {
this.expires_in = expires_in;
}
public String getPf() {
return pf;
}
public void setPf(String pf) {
this.pf = pf;
}
public String getPfkey() {
return pfkey;
}
public void setPfkey(String pfkey) {
this.pfkey = pfkey;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public int getLogin_cost() {
return login_cost;
}
public void setLogin_cost(int login_cost) {
this.login_cost = login_cost;
}
public int getQuery_authority_cost() {
return query_authority_cost;
}
public void setQuery_authority_cost(int query_authority_cost) {
this.query_authority_cost = query_authority_cost;
}
public int getAuthority_cost() {
return authority_cost;
}
public void setAuthority_cost(int authority_cost) {
this.authority_cost = authority_cost;
}
}
//好像没有用的的监听类
package jiyun.com.lovepet.qq;
import android.util.Log;
import com.tencent.open.utils.HttpUtils;
import com.tencent.tauth.IRequestListener;
import org.apache.http.conn.ConnectTimeoutException;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.SocketTimeoutException;
/**
* Created by DELL on 2017/12/17.
*/
public class BaseApiListener implements IRequestListener {
@Override
public void onComplete(JSONObject jsonObject) {
// showResult("IRequestListener.onComplete:", jsonObject.toString());
Log.e("onComplete: ",jsonObject.toString() );
doComplete(jsonObject);
}
private void doComplete(JSONObject jsonObject) {
}
@Override
public void onIOException(IOException e) {
// showResult("IRequestListener.onIOException:", e.getMessage());
Log.e("onIOException: ", e.getMessage());
}
@Override
public void onMalformedURLException(MalformedURLException e) {
// showResult("IRequestListener.onMalformedURLException", e.toString());
Log.e("onMalformedURLException", e.toString());
}
@Override
public void onJSONException(JSONException e) {
// Log.e("IRequestListener.onJSONException:", e.getMessage());
Log.e("onJSONException: ", e.getMessage());
}
@Override
public void onConnectTimeoutException(ConnectTimeoutException e) {
// TODO Auto-generated method stub
}
@Override
public void onSocketTimeoutException(SocketTimeoutException e) {
// TODO Auto-generated method stub
}
//1.4版本中IRequestListener 新增两个异常
@Override
public void onNetworkUnavailableException(HttpUtils.NetworkUnavailableException e) {
// 当前网络不可用时触发此异常
}
@Override
public void onHttpStatusException(HttpUtils.HttpStatusException e) {
// http请求返回码非200时触发此异常
}
@Override
public void onUnknowException(Exception e) {
// 出现未知错误时会触发此异常
}
}
清单文件配置 : 用哪个你复制哪个
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="jiyun.com.lovepet">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:name=".api.App"
android:allowBackup="true"
android:icon="@mipmap/pet_icon"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".ui.MainActivity"></activity>
<activity android:name=".ui.order.activity.MyOrderActivity" />
<activity android:name=".ui.BaseActivity" />
<activity android:name=".ui.pet.activity.MyPetActivity" />
<activity android:name=".ui.pet.activity.LoginActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ui.pet.activity.BingPhoneActivity" />
<activity android:name=".ui.pet.activity.ToolbarActivity" />
<activity android:name=".ui.pet.activity.WeChatActivity" />
<activity android:name=".ui.pet.activity.RegisterActivity"></activity>
<activity android:name=".order.XiangQingActivity">
</activity>
<activity android:name=".order.EvaluateActivity">
</activity>
<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="tencent1106541335" />
</intent-filter>
</activity>
<activity
android:name="com.tencent.connect.common.AssistActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<activity android:name=".ui.pet.activity.HomeActivity" />
<application>
<activity android:name="com.tencent.plus.ImageActivity" />
</application>
</application>
</manifest>
QQ登录配置等信息的网址 :http://wiki.open.qq.com/wiki/%E5%88%9B%E5%BB%BA%E5%B9%B6%E9%85%8D%E7%BD%AE%E5%B7%A5%E7%A8%8B
获取头像等个人信息的网址:http://wiki.open.qq.com/wiki/website/get_simple_userinfo