对搭档代码的一些意见
和搭档一起学,这几天他写了一个demo有关登录界面。我看了下,提出了一些个人的意见。
·代码
1 protected void onCreate(Bundle savedInstanceState) { 2 super.onCreate(savedInstanceState); 3 setContentView(R.layout.activity_main); 4 userName = (EditText) findViewById(R.id.userName); 5 userPassword = (EditText) findViewById(R.id.password); 6 sure = (Button) findViewById(R.id.sure); 7 sure.setOnClickListener(new android.view.View.OnClickListener() { 8 @Override 9 public void onClick(android.view.View view) { 10 String name = userName.getText().toString(); 11 String password = userPassword.getText().toString(); 12 Stu user = new Stu(name, password); 13 if (presenter.login(user)) { 14 Log.i("ok", "1"); 15 } else { 16 Log.i("no", "2"); 17 } 18 19 20 } 21 }); 22 }
乍一看,其实并没有什么问题,然而仔细想想,觉得有点不妥。大致有以下:
userName = (EditText) findViewById(R.id.userName);
userName.setOnClickListener(this);
//大型项目里,往往控件很多,像这样的话,代码量会很多。在这里使用butterknife。
@BindView(R.id.userName); EditText et; void dosmething(){ //dosomething }
在回来看,我们往往会合并项目,并且所有完成后还要测试。以这种方式写的话,一些功能的实现都写在onCreate()里,导致很累赘,按我们所想,其实它应该只负责加载界面而已。
而且那样,不仅测试麻烦,而且看起来很累赘。所以我们尝试用mvp模式来做一下整改。
关于mvp思想可以参考:http://blog.csdn.net/vector_yi/article/details/24719873
1.先建立项目包的结构
2.着一分析
model层:数据,实体类;
view层:
顾名思义,就是负责视图层,主界面在里面。
最后来看presenter层:
其实就相当于控制层吧,将view层与model层交互,原本在onCreate()做的数据交互、处理,都可以挪到presenter层,
在presenter层处理完后的结果让view层再回调。这样分工明确。
·presenter类
1 public boolean login(Stu user) { 2 Retrofit retrofit = new Retrofit.Builder() 3 .baseUrl(API) 4 .addConverterFactory(GsonConverterFactory.create()) 5 .build(); 6 GetService service = retrofit.create(GetService.class); 7 Call call = service.post(user); 8 call.enqueue(new Callback<Object>() { 9 @Override 10 public void onResponse( 11 Call<Object> call, Response<Object> response) { 12 // Log.i("response", "11111111111111111"); 13 flag = true; 14 15 } 16 17 @Override 18 public void onFailure(Call<Object> call, Throwable t) { 19 // Log.i("failed", "failed"); 20 flag = false; 21 } 22 23 }); 24 return flag; 25 }
mainActivity类
1 presenter = new Presenter(); 2 sure.setOnClickListener(new android.view.View.OnClickListener() { 3 @Override 4 public void onClick(android.view.View view) { 5 String name = userName.getText().toString(); 6 String password = userPassword.getText().toString(); 7 Stu user = new Stu(name, password); 8 if (presenter.login(user)) { 9 Log.i("ok", "1"); 10 } else { 11 Log.i("no", "2"); 12 } 13 } 14 } 15 16 ); 17 }
测试也更明确,也方面拓展维护。
当然小项目还是不完全能体现其优势的。
当然,之后还发现他有的方法以及属性还沿用着官方淘汰的,本人是建议不再用比较好,以免节外生枝。
关于宽度高度的尺寸,尽量用自适应属性,而不用固定值,主要是为了方便真机测试适配问题。