編輯:關於android開發
QQ第三方登錄的時候,顯示非官方正版應用,報100044錯誤;
坑1:我們在QQ互聯注冊成功後需要設置包名和簽名,簽名是通過官方提供的工具生成的。注意一點:這裡的簽名是需要由打包簽名之後APK生成,我們測試的時候是沒有經過簽名的,所以一般我們至少在這裡需要添加兩個簽名:一個我們開發測試的APP直接通過官方工具生成的簽名,另一個使我們APP經過我們自己的簽名文件簽名打包後通過官方提供的工具生成的簽名;
@Override public void onClick(View view) { switch (view.getId()) { case R.id.iv_login_qq://點擊qq登錄 onClickLogin(); break; } }
onClickLogin()方法:
private void onClickLogin() { if (!mTencent.isSessionValid()) { mTencent.login(this, "all", loginListener); isServerSideLogin = false; } else { if (isServerSideLogin) { // Server-Side 模式的登陸, 先退出,再進行SSO登陸 mTencent.logout(this); mTencent.login(this, "all", loginListener); isServerSideLogin = false; return; } mTencent.logout(this); }
loginListener接口:
IUiListener loginListener = new BaseUiListener() { @Override protected void doComplete(JSONObject values) { Timestamp = SystemClock.elapsedRealtime() + ""; Log.d(TAG, "AuthorSwitch_SDK:" + SystemClock.elapsedRealtime()); initOpenidAndToken(values);//獲取登錄返回信息token等 updateUserInfo();//異步更新保存用戶信息 } };
initOpenidAndToken()方法:
public void initOpenidAndToken(JSONObject jsonObject) { try { token = jsonObject.getString(Constants.PARAM_ACCESS_TOKEN); expires = jsonObject.getString(Constants.PARAM_EXPIRES_IN); openId_qq = jsonObject.getString(Constants.PARAM_OPEN_ID); Log.d(TAG, "initOpenidAndToken: token:" + token); Log.d(TAG, "initOpenidAndToken: expires:" + expires); Log.d(TAG, "initOpenidAndToken: openId:" + openId_qq); if (!TextUtils.isEmpty(token) && !TextUtils.isEmpty(expires) && !TextUtils.isEmpty(openId_qq)) { mTencent.setAccessToken(token, expires); mTencent.setOpenId(openId_qq); } } catch (Exception e) { } }
updateUserInfo()方法:
private void updateUserInfo() { if (mTencent != null && mTencent.isSessionValid()) { IUiListener listener = new IUiListener() { @Override public void onError(UiError e) { Log.d(TAG, "onError: "); } @Override public void onComplete(final Object response) { new Thread() { @Override public void run() { JSONObject json = (JSONObject) response;if (json.has("figureurl")) { try { String userName = json.getString("nickname"); Log.d(TAG, "run: " + userName); String userIcon = json.getString("figureurl_qq_2"); Log.d(TAG, "run: " + userIcon); String gender = json.getString("gender"); String province = json.getString("province"); String city = json.getString("city"); SharedPreferences user_login = LoginActivity.this.getSharedPreferences("user_login", MODE_PRIVATE); SharedPreferences.Editor edit = user_login.edit(); edit.putString("user_name", userName); edit.putString("user_pic", userIcon); edit.putString("gender", gender); edit.putString("province", province); edit.putString("city", city); edit.putString("openid_qq", openId_qq); edit.commit(); mHandler.sendEmptyMessage(POST_LOGIN_INIFO); } catch (JSONException e) { } } } }.start(); } @Override public void onCancel() { Log.d(TAG, "onCancel: "); } }; mInfo = new UserInfo(this, mTencent.getQQToken()); mInfo.getUserInfo(listener); } else { // mUserInfo.setText(""); // mUserInfo.setVisibility(android.view.View.GONE); // mUserLogo.setVisibility(android.view.View.GONE); } }
必須重寫onActivityResult()方法
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { Log.d(TAG, "-->onActivityResult:requestCode= " + requestCode + " resultCode=" + resultCode); if (requestCode == Constants.REQUEST_LOGIN || requestCode == Constants.REQUEST_APPBAR) { Tencent.onActivityResultData(requestCode, resultCode, data, loginListener); AppShared.setUserLogin(this, true); ToastUtils.toast("登錄成功"); } super.onActivityResult(requestCode, resultCode, data); }
一個建議:用戶頭像建議保存用戶頭像鏈接後再直接保存bitmap,在onResume中下載Bitmap圖片,這樣即使你設置了清楚緩存,在返回給頁面時也會重新去獲取用戶頭像
android自定義控件實現刮刮樂效果,android刮刮樂 只是簡單的實現了效果,界面沒怎麼做優化,不過那都是次要的啦!! 其中主要的彩票視圖類和橡皮擦類都是通過代碼
Android Material Design 兼容庫的使用,androidmaterialAndroid Material Design 兼容庫的使用 mecury
仿餓了點餐界面2個ListView聯動,界面listview聯動如圖是效果圖 是仿餓了的點餐界面 1.點擊左側的ListView,通過在在適配器中設置Item來改變顏色,
Android Sqlite基本命令,androidsqlite命令要查看數據庫,首先必須要找到db文件,如果拷貝到電腦上,查看的方法比較多,在手機上,用命令查看比較直接