搭建android项目框架实战

作者: 再见安妮 | 来源:发表于2016-07-28 10:52 被阅读961次

    1.1.1
    android开发工作也有一段时间最近项目不是很赶,闲来无事觉得目前的项目的框架不是很让人满意,于是自己重搭建一个项目,先说一下我们之前的项目框架结构,说不上优点,也还能继续维护下去,但是整体来看还是有很多不足的地方,它是根据模块来划分的(比如,用户,首页等),每个模块下面又分别有bean数据实体类,view 视图 ,apadter适配器这种结构,但是时间久了就会发现了很多一下问题,
    1.首先就是bean这个模块是个实体类里面有很多set方法每一个字段对应一个方法,导致我们的项目还没十几MB方法数就已经超过65K。
    2.其次就是我们的view视图层不但展示数据,我们还在里面做了请求数据的处理,这样整个页面代码行数差不多超过2000行,严重导致页面的复杂性。
    就以上两个问题就已经不想在继续维护下去的必要了,


    Paste_Image.png

    1.1.2
    接下来我就把我自己重构之后的架构记录下来,方便下次使用。
    大部分的app应用无非就是请求网络数据,然后展示数据,但是要弄好这两者关系不容易由于之前是请求和展示数据在一个页面里面操作,为什么我们不把他分离了,于是我用到EventBus这个库用来分发数据,没有接触的的朋友可以google,很容易上手。先给整体项目截个图

    Paste_Image.png Paste_Image.png

    1.2.3接下来展示一下我架构中用到的那些依赖库,这三个是最主要的当然还有图片缓存框架我用的是Fresco

    dependencies {    
    compile 'org.greenrobot:eventbus:3.0.0' //EventBus事件分发器   
     compile 'com.alibaba:fastjson:1.2.12' //json解析    
    compile 'com.loopj.android:android-async-http:1.4.9' //async网络请求
    }
    

    1.2.4
    接下来开始写代码只要把整个流程走通,我相信你就会看懂了。首先写数据模型层也就是bean类

    Paste_Image.png

    ①首页先写一个bean的基类用来继承

    public class BaseResponse
     {   
     public String message;    
     public boolean success;   
     public String errorCode;    
    @Override    
    public String toString() 
    {      
      return "BaseResponse
    {" +              
      "message='" + message + '\'' +          
          ", success=" + success +          
          ", errorCode='" + errorCode + '\'' +            
        '}';   
     }
    }
    

    ②接下来就是用户的实体类

     public class Userbean extends BaseResponse {  
     public DataString data;    
     public static class DataString {     
     public String name;   
     public String password;    
        @Override        
     public String toString() {    
      return "DataString{" +   "name='" + name + '\'' +   ", 
    password='" + password + '\'' +
     '}';  
    }  }}
    

    ③开始做网络数据操作,我们在User类做数据请求操作

     public void getUserInfo() {       
     sAsyncHttpClient.setConnectTimeout(CONNECT_TIMEOUT);
    sAsyncHttpClient.post(URL_VISIT_TOKEN, new JsonHttpResponseHandler() {    
    @Override    //数据请求成功
    public void onSuccess(int statusCode, Header[] headers, JSONObject response) {  
        super.onSuccess(statusCode, headers, response);               
     String responseString = response.toString();              
      Userbean bean;              
      if (null != response && response.optString("errorCode").equals("0") && !TextUtils.isEmpty(response.optString("data"))) {                  
      bean = JSON.parseObject(responseString, Userbean.class);            
        } else {                
        bean = new Userbean();                  
      bean.errorCode = response.optString("errorCode");
      bean.message = response.optString("message"); 
      bean.success = response.optBoolean("success");   
     }    
      Log.e(TAG, "  请求" + bean.success);  
      EventBus.getDefault().post(bean);  //发送数据
       }   
      @Override  //数据请求失败
      public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {  
    super.onFailure(statusCode, headers, responseString, throwable); 
     Userbean bean = new Userbean();//  
     bean.errCode  = responseString.;
     bean.message = throwable.getMessage();  
     Log.e(TAG, " getUserInfo failure"); 
     EventBus.getDefault().post(bean);   //发送数据
      }   }); }
    

    ④接下来就是各个页面的接收数据,进入页面我们要注册Eventbus

    public class LeadInPagesAc extends Activity {   
     @Override  
     protected void onCreate(Bundle savedInstanceState) {        
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main);  
     EventBus.getDefault().register(this); //need         
      } 
      }
    

    开始接收数据

    @Subscribe
    public void onEvent(Userbean bean) { 
       if (bean.success == true) {  
      if (!TextUtils.isEmpty(bean.data.name)) {   
    String name= bean.data.name;  
    String password = bean.data.password; 
     }}
    

    好了整个过程就是这个样子,我还是个菜鸟,希望有说的不好的请赐教。

    相关文章

      网友评论

      • 誓词倾城: :smiley: 推荐Retrofit 网络请求框架哦。
      • 919ee0c72568: public static class DataString {
        public String name;
        public String password; }
        bean文件这样写,使用Gson解析,可以省去get set 函数。
        不用写下面的return;
        而且使用时 不会出现大量get set方法
        再见安妮:@喝了半两 上面就是这样写的啊
      • 刘小帅:getUserInfo直接返回Userbean不是更方便吗
        作死加班狗:@刘小帅 作者应该就是想把网络和逻辑操作从view里面剥离解藕吧。。
        刘小帅: @再见安妮 可以啊,只要接下来的操作是在Ui线程
        再见安妮:@刘小帅 这样可以吗

      本文标题:搭建android项目框架实战

      本文链接:https://www.haomeiwen.com/subject/ncdslttx.html