package com.ouwenjie.note.activity.account; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.View; import android.widget.Button; import com.ouwenjie.note.NoteApplication; import com.ouwenjie.note.R; import com.ouwenjie.note.helper.BmobHelper; import com.ouwenjie.note.helper.TencentSDKHelper; import com.ouwenjie.note.model.JideUser; import com.ouwenjie.note.utils.DisplayAnimUtils; import com.ouwenjie.note.utils.LogUtils; import com.ouwenjie.note.utils.ToastUtils; import com.tencent.tauth.IUiListener; import com.tencent.tauth.UiError; import org.json.JSONException; import org.json.JSONObject; import java.lang.ref.WeakReference; import cn.bmob.v3.listener.OtherLoginListener; /** * * Created by 文杰 on 2015/6/19. */ public class LoginActivity extends AppCompatActivity implements View.OnClickListener { public static final String TAG = "LoginActivity"; public static final int MSG_LOGIN_SUCCESS = 1002; public static final int MSG_LOGIN_FAILURE = 1003; private Toolbar toolbar; private Button qqLoginBtn; private Button notLoginBtn; private TencentSDKHelper tencentSDKHelper; private Handler handler = new LoginHandler(this); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); initToolbar(); initWidget(); tencentSDKHelper = TencentSDKHelper.getInstance(this.getApplicationContext()); tencentSDKHelper.implTencent(); } @Override protected void onDestroy() { super.onDestroy(); if(handler != null){ handler.removeCallbacksAndMessages(null); } } private void initWidget(){ qqLoginBtn = (Button) findViewById(R.id.qq_login_btn); notLoginBtn = (Button) findViewById(R.id.not_login_btn); qqLoginBtn.setOnClickListener(this); notLoginBtn.setOnClickListener(this); } private void initToolbar() { toolbar = (Toolbar) findViewById(R.id.toolbar); setTitle("登录"); setSupportActionBar(toolbar); toolbar.setNavigationIcon(R.drawable.ic_chevron_left_white_24dp); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); DisplayAnimUtils.slideRightOut(LoginActivity.this); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // 应用调用Andriod_SDK接口时,如果要成功接收到回调, // 需要在调用接口的Activity的onActivityResult方法中增加如下代码 tencentSDKHelper.getTencent().onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data); } private void qqLogin(){ tencentSDKHelper.login(this, new IUiListener() { @Override public void onComplete(Object obj) { LogUtils.e("QQ Login Result == ",obj.toString()); JSONObject jsonObject = (JSONObject) obj; try { String token = jsonObject.getString(com.tencent.connect.common.Constants.PARAM_ACCESS_TOKEN); String expires = jsonObject.getString(com.tencent.connect.common.Constants.PARAM_EXPIRES_IN); String openId = jsonObject.getString(com.tencent.connect.common.Constants.PARAM_OPEN_ID); BmobHelper.loginWithAuth(LoginActivity.this.getApplicationContext(), "qq", token, expires, openId, new OtherLoginListener() { @Override public void onSuccess(JSONObject jsonObject) { LogUtils.e("Third Login Result == ",jsonObject.toString()); Message msg = new Message(); msg.what = MSG_LOGIN_SUCCESS; msg.obj = jsonObject; handler.sendMessage(msg); } @Override public void onFailure(int i, String s) { LogUtils.e("Third Login Failure "+ s); } }); } catch (JSONException e) { e.printStackTrace(); } } @Override public void onError(UiError uiError) { handler.sendEmptyMessage(MSG_LOGIN_FAILURE); } @Override public void onCancel() { } }); } private void thirdLoginSuccess(JSONObject jsonObject) { try { JSONObject qqObj = jsonObject.getJSONObject("qq"); String accessToken = qqObj.getString("access_token"); String expiresIn = String.valueOf(qqObj.getLong("expires_in")); String openId = qqObj.getString("openid"); JideUser user; user = ((NoteApplication) (LoginActivity.this.getApplication())).getUser(); user.saveQQloginInfo(LoginActivity.this.getApplicationContext(),accessToken,expiresIn,openId); NoteApplication.getNoteApplication(this).setVisitor(false);// 清除游客状态 JideUser.setLoginStatusChanged(this.getApplicationContext(),true); // 登录状态改变了 gotoUserCenter(); } catch (JSONException e) { e.printStackTrace(); } } /** * 登录失败 */ private void thirdLoginFailure() { ToastUtils.showShort(LoginActivity.this, "登录失败,请稍后再试。"); } /** * 登录成功之后的页面跳转 */ private void gotoUserCenter(){ finish(); startActivity(new Intent(LoginActivity.this,UserCenterActivity.class)); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.qq_login_btn: qqLogin(); break; default: break; } } private static class LoginHandler extends Handler{ private final WeakReference<LoginActivity> mActivity; public LoginHandler(LoginActivity activity) { mActivity = new WeakReference<LoginActivity>(activity); } @Override public void handleMessage(Message msg) { switch (msg.what){ case MSG_LOGIN_SUCCESS: JSONObject jsonObject = (JSONObject) msg.obj; mActivity.get().thirdLoginSuccess(jsonObject); break; case MSG_LOGIN_FAILURE: mActivity.get().thirdLoginFailure(); break; default: break; } } } }