開源App之MyHearts(二)

開源App之MyHearts(二)

前言

小弟技術(shù)有限,有的地方也是自己摸索出來的,可能和大神們寫的好的代碼沒法比,但是我會努力的。要對自己說下,加油!!

此次更新

1、集成QQ登錄完成

集成QQ登錄網(wǎng)上寫的介紹已經(jīng)很多了,這里就不詳細介紹,就寫下自己遇到的坑。

  //QQ的初始化
        mTencent = Tencent.createInstance("app_id(申請的)", this.getApplicationContext());
        mInfo = new UserInfo(this, mTencent.getQQToken());

在點擊登錄按鈕調(diào)用以下代碼:

  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);

            //下面的這個必須放到這個地方,要不然就會出錯   哎,,,,,調(diào)整了近一個小時,,,,我是服我自己了
            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、注冊登錄實現(xiàn)(利用Bmob作為后臺,mob的短信驗證)

在這里,mob的短信驗證集成就不多說了,他們官方的demo也是比較詳細的,代碼量也比較多,貼在這里不雅,還不如直接git呢,哈哈,是不。
注冊,我這里使用的是Bmob后臺管理,詳情可以查看,這里看下代碼,應(yīng)該是很好理解的。

 /**
     * 進行注冊
     */
    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界面代碼比較多,邏輯還是挺簡單的,就是獲取到當前用戶。

每當你應(yīng)用的用戶注冊成功或是第一次登錄成功,都會在本地磁盤中有一個緩存的用戶對象,這樣,你可以通過獲取這個緩存的用戶對象來進行登錄:
mCurrentUser = MyUser.getCurrentUser(MyUser.class);

然后就是根據(jù)這個用戶對象,獲取你需要展示的邏輯了。
這里就不多說,代碼還是直接取git,down下來運行,會受益頗多,git界面最后又怎么導(dǎo)入項目的指導(dǎo)。

4、更新用戶信息界面

對于更新用戶界面,在這里,字段定義的比較多。大家可以看下。

  private Integer age;  //年齡
    private Integer num;  //
    private Boolean sex;  //性別

    private String imgurl;  //圖片地址
    private String instance;  //地址
    private String profession;  //職業(yè)
    private String bloodtype;  //血型
    private String love;  //愛好
    private String des;  //描述
    private int userfans;  //fans數(shù)量
    private String constellation;  //星座
    private String label;  //標簽

當然,對于用戶名,密碼,是在他的父類中進行了定義,(MyUser這個類要繼承與BmobUser才能使用的哈)
對于年齡、性別這里使用了第三方彈框。項目地址
compile 'cn.qqtheme.framework:WheelPicker:1.1.2'
職業(yè)采用的第三方,依賴地址:

compile 'com.afollestad.material-dialogs:commons:0.9.0.2'

再次再次感謝此次用到的開源的項目的作者,沒有他們的開源,也不會有這個MyHearts開源。
當獲取到所有的已經(jīng)編輯好的用戶信息的時候,調(diào)用以下代碼就可以完成更新

 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();

                                }
                            }
                        });
                    }
                }
            });

在這里有個比較重要的,本來用戶城市,想要整一個三級聯(lián)動,但是,想著是不是可以嘗試以下,選擇城市的那種,右側(cè)有側(cè)邊欄的指引的,然后就實現(xiàn)了,不過在前期數(shù)據(jù)庫寫入本地的時候,出現(xiàn)了一些問題,造成寫入,找不到數(shù)據(jù)庫文件。還好最后解決了。代碼過多,就不貼了。還是那一句話,down代碼,自己運行,這樣看著代碼,運行著程序,如有不明白的自己調(diào)試,也可以和我交流。雖然這更新的不是挺多,但是代碼量還是挺可觀的(。。。。)

看下最近更新的功能吧,圖形應(yīng)該比較直觀




代碼傳送門

https://github.com/wuyinlei/MyHearts

寫在最后

基本上,本項目也就差不多了,其他的除了(即時通訊、直播),其他的頁面邏輯都差不多,即時通訊,接下來就是自己學習的一個重點了,等學好了,有時間就會在次app基礎(chǔ)上進行增加功能。直播也在以后接觸之后,會慢慢更新。這也算是對自己的一個小總結(jié),也是接下來重大任務(wù)的起始點。加油。如果有任何疑問,都可以進行交流。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容