Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

打开云阅读发现又更新了。 #96

Open
leahy913 opened this issue Dec 29, 2018 · 16 comments
Open

打开云阅读发现又更新了。 #96

leahy913 opened this issue Dec 29, 2018 · 16 comments

Comments

@leahy913
Copy link

感谢大神的开源项目。一年前在简书刷到这个App,因为很喜欢网易云的设计风格,所以就下载源码看了下。结果一入深似海,当时被编码风格吸粉了,然后才开始了解MvvM。
今年入职一个小公司,上线了两个App(虽然没人用)都是结合大神这套框架写得。因为从事Android开发也快两年了,一直是一个人写代码,也没什么人交流,所以云阅对我影响很大,可以说作者算的上我的Android老师了。
这两天没事干也尝试写了些东西,整理了一下。希望大神闲暇的时候帮我看看,代码存在哪些问题
https://github.com/leahy913/WanAndroid
谢谢!

@youlookwhat
Copy link
Owner

很高兴对你有这么大的帮助,一直以为自己写的东西对大家只是玩玩而已,你可以加我qq或微信大家多交流。这套架构有些好处也有弊端,好处是使用databinding 替代了注解取 id 的形式,类里面少了大量取id的代码,而且改了xml结构对应的代码变动也很小,弊端我觉得是在xml代码里面设值,这样感觉很不适应和不方便排查问题。
mvvm最大的特点是数据和布局联动,项目里的登录页面是很好的例子,以前的架构不规范没有突出这个特点,以前的更像mvp+databinding 就像你写的项目架构一样,我看了一下,也是我之前的模式,不过这种模式也不能说是一个不好用的模式,我反而觉得这样结合了各自的优点。只是mvvm包名要要改为p了,它相当于p层了。
现在我规范的项目相当于传统的mvvm了,数据的变化相当于视图的变化。看得出来你也是一位善于学习和总结的人,以后的路还很长,希望你前程似锦!

@leahy913
Copy link
Author

谢谢大神的回复,也谢谢你能给大家带来这么优秀的开源项目

@Cazaea
Copy link

Cazaea commented Jan 2, 2019

我也是一直在参考这个项目,并从中学到了很多东西,良师益友,受益一生。

因为项目需要,也改动了一些地方:

1.整体更换了Rx2.0;
2抽出了BaseResponse,对后台不规范的JSON进行处理;
3.抽出RxUtils工具类,抽出线程调度及异常捕获;
4.格式化了Retrofit网络日志,便于在控制台查看接口调用情况;
5.根据GET和POST,添加接口固定参数(主要是公司项目还有鉴权参数)

还没有完全学透,就像迫不及待用于项目,每次看到项目有更新,我都十分激动,太感谢你了。

 /**
     * 登录
     *
     * @param account  账号
     * @param password 密码
     */
    @FormUrlEncoded
    @POST("/app/login/check")
    Observable<BaseResponse<User>> login(@Field("account") String account, @Field("password") String password);
    /**
     * 下一步操作
     */
    public MutableLiveData<Boolean> next() {
        final MutableLiveData<Boolean> data = new MutableLiveData<>();
        if (!verifyUserInfo()) {
            data.setValue(false);
            return data;
        }
        HttpClient.Builder.getBaseServer()
                .login(phone.get(), "")
                .compose(RxUtils.schedulersTransformer())
                .compose(RxUtils.exceptionTransformer())
                .subscribe(new BaseSubscriber<User>() {
                    @Override
                    public void onError(ResponseThrowable e) {
                        ToastUtil.showShort(e.getMessage());
                        data.setValue(false);
                    }

                    @Override
                    public void onResult(User pUser) {
                        Injection.get().addData(pUser);
                        UserUtil.handleLoginSuccess();
                        data.setValue(true);
                    }
                });
       //  data.setValue(true);
        return data;
    }

@youlookwhat
Copy link
Owner

@Cazaea 客气了,这项目运用到公司项目确实有很多需要改进的,这5点都有必要拓展,我也改了其中的一些,不过没有同步到这个项目中。

@Cazaea
Copy link

Cazaea commented Jan 8, 2019

老大,这样的功能怎么实现呢?
在MainActivity获取NFC的状态,是否支持NFC和NFC是否打开,通过这两个值动态判断“开启”按钮的显示隐藏,但是&&逻辑运算符报错。
android:visibility="@={(main.isHasNfc)&&(!main.isOpenNfc)?View.VISIBLE:View.GONE}"

@Cazaea
Copy link

Cazaea commented Jan 8, 2019

可以加您的QQ吗,方便交流一下。

@youlookwhat
Copy link
Owner

可以的

@SoarY
Copy link

SoarY commented Jan 29, 2019

自己之前看了MVVM+Databinding架构,自己搭了个小Demo,但是界面着实太丑,前段时间在网上找开源项目和素材看见了作者的云阅,当时真的眼前一亮,就打算看下大神的实现自己撸一套学习,现在把作者的项目自己搭建一个,现在也才搭了一个架子。
总的来说在作者的项目中学到了很多东西,非常感谢作者。
还有看作者的资料是武汉,真的很欣慰。

@zhangjianhd
Copy link

zhangjianhd commented Oct 21, 2020

老大,这样的功能怎么实现呢?
在MainActivity获取NFC的状态,是否支持NFC和NFC是否打开,通过这两个值动态判断“开启”按钮的显示隐藏,但是&&逻辑运算符报错。
android:visibility="@={(main.isHasNfc)&&(!main.isOpenNfc)?View.VISIBLE:View.GONE}"

要转义,用

&amp;&amp;

android:visibility="@={(main.isHasNfc) &amp;&amp; (!main.isOpenNfc)?View.VISIBLE:View.GONE}"

@Cazaea
Copy link

Cazaea commented Oct 21, 2020

老大,这样的功能怎么实现呢?
在MainActivity获取NFC的状态,是否支持NFC和NFC是否打开,通过这两个值动态判断“开启”按钮的显示隐藏,但是&&逻辑运算符报错。
android:visibility="@={(main.isHasNfc)&&(!main.isOpenNfc)?View.VISIBLE:View.GONE}"

要转义,用

&amp;&amp;

android:visibility="@={(main.isHasNfc) &amp;&amp; (!main.isOpenNfc)?View.VISIBLE:View.GONE}"

非常感谢您!

@youlookwhat
Copy link
Owner

databinding对这种有复杂条件的处理不太友好,你可以定义一个类,在里面单独处理显示的逻辑,然后引入进来,这样能理解吗

@Cazaea
Copy link

Cazaea commented Oct 21, 2020

databinding对这种有复杂条件的处理不太友好,你可以定义一个类,在里面单独处理显示的逻辑,然后引入进来,这样能理解吗

完全理解,上次提问之后也做了其他的项目,慢慢优化完善了很多地方,现在就不那么写了。

@youlookwhat
Copy link
Owner

@Cazaea 你已经出道了,哈哈哈

@youlookwhat
Copy link
Owner

@zhangjian96 不知是否明白,将(main.isHasNfc)&&(!main.isOpenNfc)?View.VISIBLE:View.GONE这一段放在单独的一个类中处理试试

@Cazaea
Copy link

Cazaea commented Oct 21, 2020

@Cazaea 你已经出道了,哈哈哈

主要还是站在了你们的肩膀上,哈哈

@youlookwhat
Copy link
Owner

@Cazaea 开源就是为了互相学习嘛

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants