Code Monkey home page Code Monkey logo

t-mvp's Introduction

Apt、AspectJ、Javassisit

If you're confused about Android development, maybe it's time to open the door to a new world .

TMVP is a Aop Architecture with Apt、AspectJ、Javassisit, which based on Realm+Databinding+MVP+Retrofit+Rxjava2+MaterialDesign。

Build more complex functions with cleaner code,talk is cheap ,show u the code:

The following code to achieve the list of users to obtain the request, paging, display, just a sentence to achieve the entire complex module(ApiFactory is automatically generated by apt):

    mViewBinding.lvUser.getPresenter().setRepository(ApiFactory::getAllUser).fetch();

The user list itemType is its layoutId, set by attr in xml:

  <com.base.adapter.TRecyclerView
            android:id="@+id/lv_user"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:isRefreshable="false"
            app:itemType="@layout/list_item_user"
            app:layout_behavior="@string/appbar_scrolling_view_behavior" />

no Adapter,no ViewHolder,no onRefreshListener,on onLoadMoreListener

maybe u will like it.

===============Gorgeous dividing line===================

===============华丽丽的分界线===================

####为兼容linux、ubuntu等系统,已发布插件到本地repo文件夹下,如果你对插件内容有所修改,则需要重新发布,运行前需要在Terminal中运行 ./gradlew -p buildsrc clean build uploadArchives --info

QQ群:AndroidMVP 555343041 AndroidMVP

#更新日志:

2017/1/31:AOP新增SysPermissionAspect支持动态申请系统权限切片,轻松适配6.0+

2017/1/27:AOP新增DbRealmAspect支持Realm数据库,数据库突破你想像的简单(年夜特供)

2017/1/9: AOP新增CheckLoginAspect切片拦截未登陆用户,控制未登陆用户的操作权限

2017/1/8: 使用Apt封装Retrofit生成ApiFactory替换掉所有的Repository,狂删代码

2017/1/7: 使用DataBinding替换掉所有的ButterKnife,狂删代码

2017/1/6: 使用DataBinding替换掉所有的ViewHolder,狂删代码,从此迈向新时代

2016/12/30:使用Apt生成全局路由TRouter,更优雅的页面跳转,支持传递参数和共享view转场动画

2016/12/29:去掉BaseMultiVH新增VHSelector支持更完美的多ViewHolder

2016/12/28:使用Apt生成全局的ApiFactory替代所有的Model

2016/12/27:增加了BaseMultiVH扩展支持多类型的ViewHolder

2016/12/26:抽离CoreAdapterPresenter优化TRecyclerView

#系列文章:

##安卓AOP实战:面向切片编程

##Android实用技巧之:用好泛型,少写代码

##安卓AOP实战:APT打造极简路由

全局路由TRouter,更优雅的页面跳转

##安卓AOP实战:Javassist强撸EventBus

加入OkBus,实现注解传递事件

##安卓AOP三剑客:APT,AspectJ,Javassist

1、去掉所有反射>2、新增apt初始化工厂,替换掉了dagger2。>3、新增aop切片,处理缓存和日志

关键词 AOP+MVP+Retrofit+Rxjava+MaterialDesign+LeanCloud+NodeJS

简书:http://www.jianshu.com/p/b49958e1889d

weibo:http://weibo.com/1917320262

Github:https://github.com/north2016/T-MVP

#答疑 运行报错的,自觉google,检查As版本(2.2.2),gradle配置等(AndroidStudio每个版本gradle的api都不一样,坑),低版本手机FloatingActionButton在xml会报错,因为icon用了SVG(5.0+)

参考配置: as:2.2.2 grade:2.2.3 buildTools:24.0.3

本demo现阶段处于快速优化迭代状态,只提供idea,暂不提供lib

首页

License

Copyright 2016 north

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

t-mvp's People

Contributors

jinghongjun avatar north2016 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

t-mvp's Issues

一个页面多个请求目前适用吗

假设一个页面目前需要多个请求,而且还需要复用其他页面的请求,那么继承一个BasePresenter的泛型可以解决问题吗?

提一个问题啊,

为什么我clone了项目 到如as中 出现了这样的错误 Error:(53, 1) A problem occurred evaluating project ':app'.

Could not get unknown property 'com' for project ':app' of type org.gradle.api.Project. 但是在windows下确没有这样的错误,但是在ubuntu下却存在这样的错误,这是为什么呢?

列表页面显示问题

列表页面现在做的好像只是纯展示数据,如果需要实现其他功能好像比较困难,比如类似订单页面,如果需要在列表上加上删除按钮,并要求删除功能在列表页面实现,由于列表显示由TrecyclerView封装的,好像改动起来比较麻烦

为什么View中持有Model的引用?

为什么V中持有M的引用? MVP不是要切断M和V的联系, 由P来控制吗? 这样如何解耦?

public abstract class BaseActivity<T extends BasePresenter, E extends BaseModel> extends AppCompatActivity {
    public boolean isNight;
    public T mPresenter;
    public E mModel;   <---?

Build error issue

需要把app工程下build.gradle文件中
apply plugin: com.app.plugin.AspectjPlugin
apply plugin: com.app.plugin.JavassistPlugin
移除,才可以编译通过。

lambda 转为普通书写问题

由于现在公司普遍使用的是 jdk7,所以还不兼容 lambda
请问如何把如下代码转为普通模式

(RxSchedulers.java)

    public static <T> Observable.Transformer<T, T> io_main() {
        return tObservable -> tObservable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread());
    }

去掉realm的配置后,运行不正常

在我写的工程里面,如果不配置realm,就会报错
Caused by: javassist.NotFoundException: compileDebugJavaWithJavac.classes.com.base.event.Event
at com.app.plugin.MyInject$_injectDir_closure1.doCall(MyInject.groovy:32)

     报错原因是MyInject的32行:CtClass c = pool.getCtClass(className)

    MyInject的24行:String filePath = file.absolutePath
如果配置上realm, MyInject的24行获取到的路径是工程下的app/build/intermediates/transforms...下面的内容,
    如果不进行realm配置,获取到的路径就是工程下的app/build/intermediates/javac/debug/compileDebugJavaWithJavac......下面的内容,然后又以com进行截取字符串,就会出错,

请教下怎么解决

OkBus.getInstance().onEvent方法

OkBus.getInstance().onEvent方法在onCreate中不起作用,在点击事件中或onResume才起作用,是否是因为界面还没有加载完成的原因?

public class Main4Activity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main4);
    
    //写在这里不起作用
    OkBus.getInstance().onEvent(EventTags.JUMP_TO_MAIN2);
    
    findViewById(R.id.fdfsdsfsdf).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //写在这里可以起作用

// OkBus.getInstance().onEvent(EventTags.JUMP_TO_MAIN);
}
});
}

@Override
protected void onResume() {
    super.onResume();
    //写在这里可以起作用
    OkBus.getInstance().onEvent(EventTags.JUMP_TO_MAIN2);
}

@Bus(value = EventTags.JUMP_TO_MAIN2)
public void get(){
    Log.e("Main4Activity","aaaaaaaaaaaaaaaa");
}

}

闪退问题

下载你的这个项目,安装到手机上打开,动画过后就闪退了,乐视手机

编译报错,求解决

Error:Could not get unknown property 'com' for project ':app' of type org.gradle.api.Project.

运行黑屏?

一直打印这个log:

01-12 13:19:27.155 755-1678/cn.com.app I/SurfaceView: Locking canvas... stopped=false, win=android.view.SurfaceView$MyWindow@5b73d5d
01-12 13:19:27.155 755-1678/cn.com.app I/SurfaceView: Returned canvas: android.view.Surface$CompatibleCanvas@16a5a6d2

并且黑屏:

提个问题

我自己写了个插件,打包前修改class 中的onClick 方法, demo中测试可以
一接到正式项目中,就出错

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:transformClassesWithMultidexlistForDevDebug'.
> java.io.IOException: Can't read [/Users/sj/Documents/kqc_pro/b2b-ii-android/app/build/intermediates/transforms/jarMerging/dev/debug/jars/1/1f/combined.jar] (Can't process class [com/kqc/b2b/ui/approve/PersonalIdentificationActivity.class] (null))

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

请问你在写T-mvp时有碰到过吗

文件命名错误导致编译不通过,

还是昨天那个不能自动生成代码的问题。
经过排查,是有个类的命名错误了。见图

com.ui.release包下面的ReleaseContract这个类,写成了小写开头

123

API 怎么支持多个BaseUrl

现在Api 这个类里面写上了BaseUrl,就只能用这个域名下的接口,当有第三方的接口地址,就无法使用了APT自动生成的代码了
还有一个问题,我能否拆分出多个ApiService这样的类,现在全部的接口都在ApiService里面唉,有点太多了一个类
求大大回复,谢谢

Model 复用问题

假如多个界面需要用到 sign 方法,那么 LoginModel 中的 sign 方法将无法复用,因为是 LoginContract 中的接口,而不是通用的,我觉得 model 层应该是通用一点。

你好,aspectj在library中配置?

你好,请问aspectj在library中怎么配置,除了您的这种配置还有其他的配置吗?简单一点的。我想在library写好代码在其他的模块中和主模块中使用。

找不到文件

弄了很多次,重新从Github上下了dmeo也不能运行

import com.apt.TRouter; 这个找不到,看Issues里面也没有其他人遇到这种问题

是要改什么东西么
distributionUrl=https://services.gradle.org/distributions/gradle-2.14.1-all.zip
build:gradle:2.2.2

123

关于javassist和Aspect的一点问题

1.lambda表达式为什么无法在@aspect注解下的类下使用?
2.javassist代码中的是.class文件,就是说可以使用java,但是你这边用的是groovy。为什么不使用java呢?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.