在Fragment中实现QQ第三方登录

来源:互联网 发布:大数据的定义 编辑:程序博客网 时间:2024/05/29 12:31

我们在实现QQ第三方登录时,通常会在Activity中,在网上很多的博客中都会有实现的方法,但是在Fragment实现第三方登录时会出现一些问题。

今天,我来与大家分享一下在Fragment中实现QQ第三方登录的方法:

在fragment中定义一个button按钮,点击按钮来实现第三方的登录;

public class LeftFragment extends Fragment {    private View inflate;    private ImageView login_qq;    private static final String TAG = "MainActivity";    private static final String APP_ID = "";//官方获取的APPID    private Tencent mTencent;    private MyBaseUIlister mIUiListener;    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        inflate = View.inflate(getContext(), R.layout.activity_leftfragment, null);        mTencent = Tencent.createInstance(APP_ID,getActivity());        return inflate;    }    @Override    public void onActivityCreated(@Nullable Bundle savedInstanceState) {        super.onActivityCreated(savedInstanceState);        login_qq = (ImageView) inflate.findViewById(R.id.login_qq);        MainActivity mainActivity = (MainActivity) getActivity();        title_img = (ImageView) mainActivity.findViewById(R.id.title_img);        MyBaseAdapter myBaseAdapter = new MyBaseAdapter(list, getContext());        login_qq.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                mIUiListener = new MyBaseUIlister(getActivity(),title_img);                mTencent.login(getActivity(),"all", mIUiListener);            }        });    }}

创建一个实现IUiListener的类,方便我们来调用:

package com.example.topnews;import android.content.Context;import android.util.Log;import android.widget.ImageView;import android.widget.Toast;import com.nostra13.universalimageloader.core.ImageLoader;import com.tencent.connect.UserInfo;import com.tencent.connect.auth.QQToken;import com.tencent.tauth.IUiListener;import com.tencent.tauth.Tencent;import com.tencent.tauth.UiError;import org.json.JSONException;import org.json.JSONObject;public class MyBaseUIlister implements IUiListener {    private Tencent mTencent;    private Context context;    private UserInfo mUserInfo;    private String str;    ImageView image;    public MyBaseUIlister(Context context) {        this.context = context;    }    public MyBaseUIlister(Context context, ImageView image) {        this.context = context;        this.image = image;    }    @Override    public void onComplete(Object response) {        mTencent = Tencent.createInstance("1105602574", context);        Toast.makeText(context, "授权成功", Toast.LENGTH_SHORT).show();        Log.e("=======", "response:" + response);        JSONObject obj = (JSONObject) response;        try {            String openID = obj.getString("openid");            String accessToken = obj.getString("access_token");            String expires = obj.getString("expires_in");            mTencent.setOpenId(openID);            mTencent.setAccessToken(accessToken, expires);            QQToken qqToken = mTencent.getQQToken();            mUserInfo = new UserInfo(context, qqToken);            mUserInfo.getUserInfo(new IUiListener() {                @Override                public void onComplete(Object response) {                    Log.e("======", "登录成功" + response.toString());                    if (response == null) {                        return;                    }                    try {                        JSONObject jo = (JSONObject) response;                        String img = jo.getString("figureurl_qq_1");                        ImageLoader.getInstance().displayImage(img, image);                    } catch (Exception e) {                        e.printStackTrace();                    }                }                @Override                public void onError(UiError uiError) {                    Log.e("======", "登录失败" + uiError.toString());                }                @Override                public void onCancel() {                    Log.e("====", "登录取消");                }            });        } catch (JSONException e) {            e.printStackTrace();        }    }    @Override    public void onError(UiError uiError) {    }    @Override    public void onCancel() {    }}

在MainActivity中实现回调的方法:

 @Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    mIUiListener = new MyBaseUIlistener(this);}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {    if(requestCode == Constants.REQUEST_LOGIN){        Tencent.onActivityResultData(requestCode,resultCode,data,mIUiListener);    }    super.onActivityResult(requestCode, resultCode, data);}