在Fragment中使用QQ第三方登录时回调方法的问题
来源:互联网 发布:大数据面试题 编辑:程序博客网 时间:2024/06/04 18:45
在Fragment的布局中只有一个登录的点击按钮和显示头像的ImageView
Step:1在Fragment的onCreateView中,把视图加载好,同时传入参数APPID和全局getActivity()上下文
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { view = View.inflate(getActivity(), R.layout.activity_frag,null); mTencent = Tencent.createInstance(APP_ID,getActivity()); return view;}Step:2在Fragment中的onActivityCreated方法中获取我们需要的控件
public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); //登录按钮 btn = (Button) view.findViewById(R.id.btn); image = (ImageView) view.findViewById(R.id.image); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mIUiListener = new MyBaseUIlistener(getActivity(),image); //all表示获取所有权限 mTencent.login(getActivity(),"all", mIUiListener); } });}特别说明:*在MyBaseUIlistener中就是一个实现UIListener的一个类
public class MyBaseUIlistener implements IUiListener { private Tencent mTencent; private Context context; private UserInfo mUserInfo; private String str; ImageView image; public MyBaseUIlistener(Context context) { this.context = context; } public MyBaseUIlistener(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) { Toast.makeText(context, "授权失败", Toast.LENGTH_SHORT).show(); } @Override public void onCancel() { Toast.makeText(context, "授权取消", Toast.LENGTH_SHORT).show(); }}
在该类中创建了两个有参构造器。因为我们要把QQ头像放到Fragment上。需要传入一个Imageview来加载这个图片。但是ManinActivity中无法找到Fragment布局中的控件。所以使用了两个构造器
我们把回调的方法放到Activity中
@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);}
这样一来,就实现了在Fragment中登录QQ并获取头像
注:在加载图片时。使用了Imageloader,通过请求数据,我们可以得到头像的地址。大家可以自行决定使用哪种图片加载方式进行加载。
阅读全文
0 0
- 在Fragment中使用QQ第三方登录时回调方法的问题
- 在Fragment中实现QQ第三方登录
- 关于使用QQ做第三方登录的问题!
- Android QQ第三方登录的使用
- qq第三方登录问题
- QQ第三方登陆(在Fragment中运行)
- QQ的第三方登录
- QQ的第三方登录
- qq分享,第三方登录等,要注意的问题
- QQ、sina第三方登录遇到的问题
- iOS QQ实现第三方登录以及遇到的问题
- iOS QQ实现第三方登录以及遇到的问题
- 关于第三方QQ登录遇到的问题
- ShareSDK [iOS常见问题] 关于使用QQ做第三方登录的问题!
- Android应用使用QQ进行第三方登录的一些问题
- php中关于qq第三方登录
- 第三方网站使用qq登录
- php使用第三方QQ登录
- 内部类、外部类
- Oracle产生动态表明的视类
- 函数传值的三种方法
- git分支与主线合并流程
- 数据库各大范式
- 在Fragment中使用QQ第三方登录时回调方法的问题
- xmlbeandefinitionreader defaultlistablebeanfactory (beanfactory 已被弃用)
- Windows上安装nodejs版本管理器nvm
- Java的HttpURLConnection通过POST请求中文乱码
- MonoDevelop编译
- String:521. Longest Uncommon Subsequence I
- 如何用mybatis实现多对多
- Mac读取ntfs格式磁盘的办法 简单粗暴
- 如何创建一个类只能在堆(栈)上建立对象