遠離過度設計:Android專案最適用的架構
前段時間看了幾篇MVP在android上的應用,大多數的思路都是一樣的。MVP與MVC最不同的一點是M與V是不直接關聯的也是就Model與View不存在直接關係,這兩者之間間隔著的是Presenter層,通過Presenter來處理MV之間的關係。但是同樣的這麼做也會導致很多重複的程式碼,迭代容易寫起來真是惱火不解釋。
不喜歡這種設計,但是想法總是要有的,於是我這樣做了;
我們通常情況下的一個帶有列表的介面(listview,gridview,recyclerview,xxView)但凡是需要從網路載入資料的都有以下幾個特點:
1.URL(api地址)
2.Params(引數)
3.回撥
我們的Activity往往都只需要接受或者傳入這些值來控制
@Override
public String getApiUrl() {
return url;
}
@Override
public RequestParams getParams() {
return params;
}
@Override
public Class getClazz() {
}
@Override
public void Onsuccess(Object o) {
}
@Override
public void Onfailure(String msg) {
T.showShort(this, msg);
}
在Acvtivity中,我只需要這幾個方法就可以搞定,開一個BaseListActivity在裡邊實現網路訪問就可以了,之後的activity完全不用管這個list中如何去獲取資料的,接受的永遠只是一個物件而已。
例項:
public abstract class BaseListActivity<T> extends BaseActivity implements HttpRequstParams<T> {
private RequestQueue mRequestQueue;
private static final String HTTP_TAG = "tag";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mRequestQueue = Volley.newRequestQueue(this);
LoadingData();
}
/**
* 獲取列表
*/
private void LoadingData() {
StringRequest request = new StringRequest(Request.Method.POST, getApiUrl(), new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Gson gson = new Gson();
T t = (T) gson.fromJson(response,getClazz());
Onsuccess(t);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
Onfailure("獲取資料失敗");
}
});
request.setRequestParams(getParams());
request.setTag(HTTP_TAG);
mRequestQueue.add(request);
}
/**
* 結束網路訪問請求
*/
@Override
protected void onDestroy() {
super.onDestroy();
mRequestQueue.cancelAll(HTTP_TAG);
}
}
public interface HttpRequstParams<T> {
/**
* 獲取網路訪問的地址
*
* @return
*/
String getApiUrl();
/**
* 獲取引數
*
* @return
*/
RequestParams getParams();
/**
* 獲取位元組碼
*
* @return
*/
Class getClazz();
/**
* 成功
**/
void Onsuccess(T t);
/**
* 失敗
**/
void Onfailure(String msg);
}
public class TestActivity extends BaseListActivity {
@InjectView(R.id.listView)
ListView listView;
@Override
protected void initLayoutAndView() {
setContentView(R.layout.activity_app_store);
}
@Override
protected void addListener() {
}
@Override
public String getApiUrl() {
return API.APP.APPLIST;
}
@Override
public RequestParams getParams() {
RequestParams params = new RequestParams();
params.addBodyParameter("", "");
.....
return params;
}
@Override
public Class getClazz() {
return xx.class;
}
@Override
public void Onsuccess(Object o) {
}
@Override
public void Onfailure(String msg) {
T.showShort(this, msg);
}
}
這種方式配合快速adapter使用,程式碼就這麼多。輕鬆加愉快吧!
相關文章
- Springboot專案架構設計Spring Boot架構
- Android專案架構搭建Android架構
- Android 專案最新架構Android架構
- Android 專案重構之路:架構篇Android架構
- android專案整體介面架構(可直接複用)Android架構
- 看懂架構設計中的服務隔離架構
- 架構實戰--軟體架構設計的過程架構
- 答面試官問:如何設計SaaS專案的架構面試架構
- 坑:重構過程中的過度設計
- 架構設計案例專題架構
- AWS最適合程式設計師的平臺,Android支援最棒!程式設計師Android
- 應用架構圖的設計應用架構
- Springboot+shiro+mybatis-plus+vue前後端分離專案設計架構Spring BootMyBatisVue後端架構
- 大專案為服務架構設計思維架構
- 前後端分離架構中的介面設計後端架構
- Android簡潔架構設計Android架構
- iOS應用架構談:架構設計的方法論iOS應用架構
- Flutter應用的Clean架構示例專案Flutter架構
- 本次專案採用的技術架構架構
- 安居客Android專案架構演進Android架構
- Android架構系列-基於MVP建立適合自己的架構Android架構MVP
- 程式設計師離百萬年薪有多遠?移動架構師是這樣學成的!程式設計師架構
- iOS應用架構談(一):架構設計的方法論iOS應用架構
- Vue 專案架構設計與工程化實踐Vue架構
- 架構設計複雜度的6個來源架構複雜度
- Vue 在大型專案中的架構設計和最佳實踐Vue架構
- 解析 Android 架構設計原則Android架構
- Apache Hudi 設計與架構最強解讀Apache架構
- 《從零構建前後分離web專案》探究 - 深入聊聊前後分離架構Web架構
- 遠離極限程式設計程式設計
- 直接拿來用!最火的Android開源專案Android
- React應用架構設計指南React應用架構
- SimpleAdmin手摸手教學之:專案架構設計2.0架構
- 【架構設計的藝術】Kafka如何通過精妙的架構設計優化JVM GC問題?【石杉的架構筆記】架構Kafka優化JVMGC筆記
- 小程式的專案結構設計
- 架構設計之架構的演變架構
- 專案重構之架構架構
- springcloud架構-HongHucommon-service專案構建過程SpringGCCloud架構