标签:解释 iss 整合 tag over cal 资源 margin row
为什么要使用它呢?我们来想想如果不使用它的话,我们直接操作OKHTTP3的网络请求,还需要做哪些操作?当发送请求的时候,来封装要以get或者post方式发送,然后回来了GJSON解析成我们需要的实体对象,还要看返回的数据相应码等等,来正确解析我们的数据,那么Retrofit2就是为了高效解决这些事情的,当然Retrofit2不止这些功能,具体大家可看API。
比较了一些主流的图片加载以及各种对比,Fresco算是综合比较好的,支持较多,更新及时。
不解释了 大家都在用
都是一些用的比较多的,Cookie自动管理、View注入Butterknife、以及RecycleView下拉刷新BaseRecyclerViewAdapterHelper、Utilcode工具库、Logger日志库 大家以前没用过的可以关注下 都很好用 灵活
下面重点说一下MVP的Clean模式,现在MVP很火,大行其道,不搞一套MVP架构都感觉缺少点啥,哈哈,为什么呢?MVP难道就是简单的加了一个Presenter层吗?显然不是,它是一种思想,如果简单的一个应用每个Activity类中500行搞定,还需要MVP吗?我觉得就不适合了。越大型的APP、越复杂的APP才会让你觉得MVP的好。怎么做到让代码各司其职。
上面这张图就是Clean的架构,为什么需要Clean架构呢,我们来想想,我们把业务逻辑部分都放到了Presenter层,如果这个页面做的逻辑很多,十来个业务操作(请求数据,数据库操作等),这样Presenter也会非常庞大,既然臃肿,我们继续抽象,在Presenter层下面在加一层Use Cases Domain层,专门处理增删改查等任务岂不业务更清晰明了,Presenter只需要执行相关UseCases任务,操作完回调处理就OK了。
还有一点差点忘了为什么叫Dagger2,版本号2呢,因为它2,哈哈,因为Dagger1使用的是运行时反射机制,这样会影响性能,Dagger2使用编译时自动生成对应代码,直接运行性能不会受到影响。
- com.wjj.easy.easyandroidHelper
- common
- base
- BaseActivity
- BaseFragment
- BasePresenter
- BaseView
- SimpleActivity
- SimpleFragment
- di
- ActivityCommonComponent
- AppCommonComponent
- AppCommonModule
- FragmentCommonComponent
- net
- ApiService
- AppHttp
- model
- module
- login
- LoginActivity
- LoginContract
- LoginPresenter
- utils
- AppApplication
public class LoginActivity extends BaseActivity<LoginPresenter>
/**
* Activity注入器
* @author wujiajun
*/
@ActivityScope
@Component(dependencies = AppCommonComponent.class, modules = {ActivityModule.class})
public interface ActivityCommonComponent extends ActivityComponent {
void inject(LoginActivity activity);
void inject(MainActivity activity);
}
/**
* 获取注册验证码
*/
@FormUrlEncoded
@POST(HOST + "app/sendSMS.do")
Call<BaseStatus> getVerifyCode(@Field("username") String username, @Field("password") String pwd);
public void getVerifyCode(String username, String pwd, final Http.HttpCallback<BaseStatus> callback) {
Call<BaseStatus> call = apiService.getVerifyCode(username, pwd);
call.enqueue(new Http.CallbackDefault(callback));
call.request();
}
/**
* 登录Activity
*
* @author wujiajun
*/
public class LoginActivity extends BaseActivity<LoginPresenter> implements LoginContract.View {
@BindView(R.id.set_user_name)
EditText setUserName;
@BindView(R.id.set_pwd)
EditText setPwd;
@BindView(R.id.set_verify_code)
EditText setVerifyCode;
@BindView(R.id.get_verify_code)
TextView getVerifyCode;
@BindView(R.id.tv_login)
TextView tvLogin;
@BindView(R.id.tool_bar)
Toolbar toolbar;
@Override
protected void initInject() {
getActivityComponent().inject(this);
}
@Override
protected void initEventAndData() {
toolbar.setLogo(R.mipmap.icon_app);
toolbar.setTitle(R.string.app_name);
toolbar.setTitleTextColor(ContextCompat.getColor(this, R.color.white));
toolbar.setTitleMarginStart(getResources().getDimensionPixelSize(R.dimen.padding_size_30));
setSupportActionBar(toolbar);
}
@Override
protected int getContentView() {
return R.layout.activity_login;
}
@OnClick({R.id.get_verify_code, R.id.tv_login})
public void onClick(View view) {
switch (view.getId()) {
case R.id.get_verify_code:
getPresenter().getVerifyCode(setUserName.getText().toString(), setPwd.getText().toString());
startActivity(new Intent(this, MainActivity.class));
break;
case R.id.tv_login:
getPresenter().login(setUserName.getText().toString(), setPwd.getText().toString(), setVerifyCode.getText().toString());
break;
}
}
}
/**
* Login Presenter
* Created by wujiajun on 17/4/7.
*/
public class LoginPresenter extends BasePresenter<LoginContract.View> implements LoginContract.Presenter {
@Inject
GetVerifyCodeTask mGetVerifyCodeTask;
@Inject
LoginTask mLoginTask;
@Inject
public LoginPresenter() {
}
@Override
public void getVerifyCode(String userName, String pwd) {
mGetVerifyCodeTask.setUserName(userName);
mGetVerifyCodeTask.setPwd(pwd);
mGetVerifyCodeTask.setCallback(new UseCase.Callback<BaseStatus>() {
@Override
public void success(BaseStatus baseStatus) {
getView().toast("getVerifyCode success!");
}
@Override
public void fail() {
getView().toast("getVerifyCode fail!");
}
});
getThreadExecutor().execute(mGetVerifyCodeTask);
}
@Override
public void login(String userName, String pwd, String verifyCode) {
getView().showLoading();
mLoginTask.setUserName(userName);
mLoginTask.setPwd(pwd);
mLoginTask.setVerifyCode(verifyCode);
mLoginTask.setCallback(new UseCase.Callback<LoginResponse>() {
@Override
public void success(LoginResponse loginResponse) {
getView().toast("login success!");
}
@Override
public void fail() {
getView().toast("login fail!");
}
});
getThreadExecutor().execute(mLoginTask);
}
}
/**
* 获取验证码任务
*
* @author wujiajun
*/
public class GetVerifyCodeTask extends AbstractUseCase {
String publicKey = "11";
String userName;
String pwd;
@Inject
AppHttp appHttp;
@Inject
public GetVerifyCodeTask() {
}
@Override
public void run() {
appHttp.getVerifyCode(userName, SecretUtils.encryptByPublicKey(pwd, publicKey), new Http.HttpCallback<BaseStatus>() {
@Override
public void onResponse(BaseStatus baseStatus) {
getCallback().success(baseStatus);
}
@Override
public void onFailure(Throwable t) {
getCallback().fail();
}
});
}
public void setUserName(String userName) {
this.userName = userName;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
https://github.com/wu928320442/EasyAndroid
compile ‘com.wjj.easy:easyandroid:1.0.0‘
[Android开源]一套快速高效的开发框架EasyAndroid
标签:解释 iss 整合 tag over cal 资源 margin row
原文地址:http://blog.csdn.net/wu928320442/article/details/70666908