開源App之MyHearts(二)
###前言 小弟技術有限,有的地方也是自己摸索出來的,可能和大神們寫的好的程式碼沒法比,但是我會努力的。要對自己說下,加油!! ###此次更新 #####1、整合QQ登入完成 整合QQ登入網上寫的介紹已經很多了,這裡就不詳細介紹,就寫下自己遇到的坑。
//QQ的初始化
mTencent = Tencent.createInstance("app_id(申請的)", this.getApplicationContext());
mInfo = new UserInfo(this, mTencent.getQQToken());
複製程式碼
在點選登入按鈕呼叫以下程式碼:
mTencent.login(this, "all", loginListener);
複製程式碼
IUiListener loginListener = new BaseUiListener() {
@Override
protected void doComplete(JSONObject values) {
Log.d(TAG, "ruolanmingyue:" + values);
Log.d("SDKQQAgentPref", "AuthorSwitch_SDK:" + SystemClock.elapsedRealtime());
initOpenidAndToken(values);
//下面的這個必須放到這個地方,要不然就會出錯 哎,,,,,調整了近一個小時,,,,我是服我自己了
updateUserInfo();
}
};
public static void initOpenidAndToken(JSONObject jsonObject) {
try {
String token = jsonObject.getString(Constants.PARAM_ACCESS_TOKEN);
String expires = jsonObject.getString(Constants.PARAM_EXPIRES_IN);
String openId = jsonObject.getString(Constants.PARAM_OPEN_ID);
if (!TextUtils.isEmpty(token) && !TextUtils.isEmpty(expires)
&& !TextUtils.isEmpty(openId)) {
mTencent.setAccessToken(token, expires);
mTencent.setOpenId(openId);
}
} catch (Exception e) {
}
}
private class BaseUiListener implements IUiListener {
@Override
public void onComplete(Object response) {
if (null == response) {
Util.showResultDialog(LoginActivity.this, "返回為空", "登入失敗");
return;
}
JSONObject jsonResponse = (JSONObject) response;
if (null != jsonResponse && jsonResponse.length() == 0) {
Util.showResultDialog(LoginActivity.this, "返回為空", "登入失敗");
return;
}
doComplete((JSONObject) response);
}
@Override
public void onError(UiError e) {
Util.toastMessage(LoginActivity.this, "onError: " + e.errorDetail);
}
@Override
public void onCancel() {
Util.toastMessage(LoginActivity.this, "onCancel: ");
}
protected void doComplete(JSONObject values) {
}
}
複製程式碼
以上就能夠吊起QQ客戶端登入,然後獲取使用者資訊(具體可以檢視demo,最後會貼上地址的,不要急哈)
2、註冊登入實現(利用Bmob作為後臺,mob的簡訊驗證)
在這裡,mob的簡訊驗證整合就不多說了,他們官方的demo也是比較詳細的,程式碼量也比較多,貼在這裡不雅,還不如直接git呢,哈哈,是不。 註冊,我這裡使用的是Bmob後臺管理,詳情可以檢視,這裡看下程式碼,應該是很好理解的。
/**
* 進行註冊
*/
private void doRegister() {
String userName = mEditName.getText().toString().trim();
final MyUser myUser = new MyUser();
if (RegularUtils.isUsername(userName)) {
myUser.setUsername(userName);
myUser.setPassword(pwd);
myUser.setMobilePhoneNumber(phone);
addSubscription(myUser.signUp(new SaveListener<MyUser>() {
@Override
public void done(MyUser myUser, BmobException e) {
if (e == null) {
Toast.makeText(RegisterSecondActivity.this, "註冊成功", Toast.LENGTH_SHORT).show();
PreferencesUtils.putString(RegisterSecondActivity.this,Contants.USER_NAME,userName);
PreferencesUtils.putString(RegisterSecondActivity.this,Contants.USER_PASSWORD,pwd);
startActivity(new Intent(RegisterSecondActivity.this, LoginActivity.class));
} else {
//註冊失敗
}
}
}));
}
}
複製程式碼
#####3、使用者詳情介面 使用者詳情介面,除了UI介面程式碼比較多,邏輯還是挺簡單的,就是獲取到當前使用者。
每當你應用的使用者註冊成功或是第一次登入成功,都會在本地磁碟中有一個快取的使用者物件,這樣,你可以通過獲取這個快取的使用者物件來進行登入:
mCurrentUser = MyUser.getCurrentUser(MyUser.class);
複製程式碼
然後就是根據這個使用者物件,獲取你需要展示的邏輯了。 這裡就不多說,程式碼還是直接取git,down下來執行,會受益頗多,git介面最後又怎麼匯入專案的指導。 #####4、更新使用者資訊介面 對於更新使用者介面,在這裡,欄位定義的比較多。大家可以看下。
private Integer age; //年齡
private Integer num; //
private Boolean sex; //性別
private String imgurl; //圖片地址
private String instance; //地址
private String profession; //職業
private String bloodtype; //血型
private String love; //愛好
private String des; //描述
private int userfans; //fans數量
private String constellation; //星座
private String label; //標籤
複製程式碼
當然,對於使用者名稱,密碼,是在他的父類中進行了定義,(MyUser這個類要繼承與BmobUser才能使用的哈)
對於年齡、性別這裡使用了第三方彈框。專案地址
compile 'cn.qqtheme.framework:WheelPicker:1.1.2'
職業採用的第三方,依賴地址:
compile 'com.afollestad.material-dialogs:commons:0.9.0.2'
複製程式碼
再次再次感謝此次用到的開源的專案的作者,沒有他們的開源,也不會有這個MyHearts開源。 當獲取到所有的已經編輯好的使用者資訊的時候,呼叫以下程式碼就可以完成更新
String objectId = mCurrentUser.getObjectId();
user.update(objectId, new UpdateListener() {
@Override
public void done(BmobException e) {
if (e == null) {
CustomPrograss.disMiss();
}
}
});
複製程式碼
對於更新使用者頭像,可以檢視下我之前的一個圓形圖片,裡面有啟用相簿或者相機的https://github.com/wuyinlei/CircleImgae 這裡更新使用者頭像,使用的是Bmob的另一個類。BmobFile,這裡看下程式碼
//頭像本地地址
final BmobFile bmobFile = new BmobFile(new File(path));
//
bmobFile.uploadblock(new UploadFileListener() {
@Override
public void done(BmobException e) {
if (e == null) {
Toast.makeText(UserActivity.this, "pic is success", Toast.LENGTH_SHORT).show();
// MyUser myUser =MyUser.getCurrentUser(MyUser.class);
//得到上傳的圖片地址
String fileUrl = bmobFile.getFileUrl();
mCurrentUser.setImgurl(fileUrl);
//更新圖片地址
mCurrentUser.update(mCurrentUser.getObjectId(), new UpdateListener() {
@Override
public void done(BmobException e) {
if (e == null) {
Toast.makeText(UserActivity.this, "update", Toast.LENGTH_SHORT).show();
}
}
});
}
}
});
複製程式碼
在這裡有個比較重要的,本來使用者城市,想要整一個三級聯動,但是,想著是不是可以嘗試以下,選擇城市的那種,右側有側邊欄的指引的,然後就實現了,不過在前期資料庫寫入本地的時候,出現了一些問題,造成寫入,找不到資料庫檔案。還好最後解決了。程式碼過多,就不貼了。還是那一句話,down程式碼,自己執行,這樣看著程式碼,執行著程式,如有不明白的自己除錯,也可以和我交流。雖然這更新的不是挺多,但是程式碼量還是挺可觀的(。。。。) ###看下最近更新的功能吧,圖形應該比較直觀
###程式碼傳送門 https://github.com/wuyinlei/MyHearts ###寫在最後 基本上,本專案也就差不多了,其他的除了(即時通訊、直播),其他的頁面邏輯都差不多,即時通訊,接下來就是自己學習的一個重點了,等學好了,有時間就會在次app基礎上進行增加功能。直播也在以後接觸之後,會慢慢更新。這也算是對自己的一個小總結,也是接下來重大任務的起始點。加油。如果有任何疑問,都可以進行交流。