1. 概述與分析
在實際專案中,我們不可避免的需要網路請求資料,由於網路或請求方式等主觀或客觀原因,導致我們請求的結果有時會出現一些偏差,從而導致我們ui介面顯示也會有所不同。一般情況下,網路請求後我們的介面一般呈現三種頁面狀態:「正在載入中」、「載入失敗」和「載入成功」。那麼就可以通過網路請求後結果讓ui介面自動切換。
2. 設計思路
通常情況下,正在載入和載入失敗的介面都是相同的,只有載入成功後的介面不同。為了能讓ui介面隨著網路請求結果自動切換,那我們可以按照如下思路去設計:
1: 將三種狀態的介面疊加在一起綜上分析,我們可以得出如下框架原理圖:2: 定義三種狀態
3: 定義乙個當前狀態
4: 定義乙個根據當前狀態來切換介面的方法
5: 定義乙個根據網路請求返回結果自動切換介面的方法
3. **實現
原理上面已經分析清楚了,下面我們就將原理用**來實現:
/**
* author:salmonzhang
* description:ui切換框架
* date:2017/8/6 0018 10:05
*/public abstract class loadpager extends framelayout
public loadpager(@nonnull context context, @nullable attributeset attrs)
public loadpager(@nonnull context context, @nullable attributeset attrs, @attrres int defstyleattr)
//初始化ui框架三個介面
private void init()
//載入成功介面
if (msuccessview == null)
}//載入失敗的介面
if (merrorview == null)
//將三個布局新增在一起
addview(mloadingview);
addview(msuccessview);
addview(merrorview);
//頁面切換的方法
changeview();
//根據網路資料,自動切換頁面
autoshowpager();
}//自動切換頁面
private void autoshowpager()
});}
}).start();
}//校驗資料
private state checkdata(object obj) else else
} else
}}//頁面切換方法
private void changeview()
}//定義三個狀態
public enum state
//定義乙個當前狀態(預設正在載入中)
private state mcurrentstate = state.loading;
//建立乙個載入成功的介面
public abstract view createsuccessview();
//請求網路資料
public abstract object getnetdata();
}
4. ui框架的使用
在開發中我們一般都會定義乙個basefragment,當涉及到網路請求資料時,此時就可以在oncreateview方法中使用ui自動切換框架來載入布局。示例**如下:
public abstract class basefragment extends fragment
@override
public view createsuccessview() };}
return mloadpager;
}//子類建立布局
public abstract view createitemview();
//子類實現資料請求
public abstract object questdata();
}
好了,上面就是網路請求ui自動切換框架的分析、實現和使用。希望對你有所幫助,不足之處,望指正,多謝! retrofit網路請求框架
android studio可引用gradle compile 整合retrofit compile com.squareup.retrofit2 retrofit 2.1.0 首先建立乙個inte ce請求介面 註解對應的包如下 import retrofit2.http.path 以下請求介面 ...
UI自動化測試框架
python selenium unittest ddt htmlreport分布式資料驅動自動化測試框架結構 1 business 公共業務模組,如登入模組,可以把登入模組進行封裝供呼叫 login business.py from page object.common page.login pa...
python appium的UI自動化框架的分享
之所以做這個自動化主要原因還是想減輕手工測試壓力,部分功能模組交給自動化測試來做回歸測試可以減輕部門小夥伴的壓力!哈哈哈!下面就簡單分享下 1.首先是框架結構,入下圖 cases存放具體測試用例,裡面可以根據軟體模組再具體細分,但是要以package形式新建 common裡面主要是一些公共依賴的東西...