日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android Mvc 模式

發布時間:2024/1/8 Android 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android Mvc 模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.Mvc 介紹

?? Model-View-Controller(模型-視圖-控制器) 模式,這種模式用于應用程序的分層開發。
?? model:模型層主要是處理數據的,主要進行網絡請求,復雜的數據操作
?? view:視圖層xml 負責數據的顯示,主要是xml,View負責
?? controller:控制層處理用戶交互的部分,負責從視圖層獲取數據傳遞給模型層進行處理activity,Fragment和Adapter充當這個角色

如圖:

2.Android中demo

(1).代碼的目錄結構:

(2).model層:

public interface GetDataModelImpl {public void getData(String url, GetDataListener listener); } public class GetDataModel implements GetDataModelImpl {@Overridepublic void getData(String url, final GetDataListener listener){OkHttpClient client = new OkHttpClient(final Request request = new Request.Builder().url(url).addHeader("Content-Type","application/json").build();client.newCall(request).enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {listener.onFail();} ?@Overridepublic void onResponse(Call call, final Response response) throws IOException {final String resultStr = response.body().string();Handler mainHandler = new Handler(Looper.getMainLooper());mainHandler.post(new Runnable() {@Overridepublic void run() {//已在主線程中,更新UIif(response.isSuccessful()){//回調的方法執行在子線程。listener.onSuccess(resultStr);}else{listener.onFail();}}}); ? ?} ? ? ?});} }

(3).view層

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"> ?<Buttonandroid:id="@+id/bt0"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="mvc1獲取數據"></Button><Buttonandroid:id="@+id/bt1"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="mvc2獲取數據(變相的)"></Button><Buttonandroid:id="@+id/bt2"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="沒有用mvc模式的"></Button><TextViewandroid:id="@+id/tv"android:layout_width="fill_parent"android:layout_height="fill_parent"android:text="返回的結果"></TextView> ? </LinearLayout>

(4).controller層

public class MainActivity extends FragmentActivity implements GetDataListener {private GetDataModelImpl getDataModel;private Button bt0;private Button bt1;private Button bt2;private TextView tv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);bt0 = (Button)findViewById(R.id.bt0);bt1 = (Button)findViewById(R.id.bt1);bt2 = (Button)findViewById(R.id.bt2);tv = (TextView)findViewById(R.id.tv); ?bt0.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String url = "https://www.baidu.com/";getDataModel.getData(url,MainActivity.this); ?}});bt1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//換一種形態的mvc模式這個時候只不過是沒有回調lister,但是方法返回值里面有也屬于mvc模式int number = UtilTools.parseInt("2");Toast.makeText(getApplicationContext(),"獲取的數據"+ number,Toast.LENGTH_LONG).show();}});bt2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//沒有mvc模式 數據處理的能力都在activity層也就是Controller層//這樣造成activity 有控制層的能力也有model層的數據處理的能力,導致activity代碼量很大String url = "https://www.baidu.com/";getData(url,MainActivity.this);}});if(getDataModel == null){getDataModel = new GetDataModel();}} ?@Overridepublic void onSuccess(String data) {if(!TextUtils.isEmpty(data)){tv.setText(data);}else{tv.setText("請求的結果為空");} ?} ?@Overridepublic void onFail() {tv.setText("---請求的結果失敗--");}public void getData(String url, final GetDataListener listener){OkHttpClient client = new OkHttpClient();final Request request = new Request.Builder().url(url).addHeader("Content-Type","application/json").build();client.newCall(request).enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {listener.onFail();} ?@Overridepublic void onResponse(Call call, final Response response) throws IOException {final String resultStr = response.body().string();Handler mainHandler = new Handler(Looper.getMainLooper());mainHandler.post(new Runnable() {@Overridepublic void run() {//已在主線程中,更新UIif(response.isSuccessful()){//回調的方法執行在子線程。listener.onSuccess(resultStr);}else{listener.onFail();}}}); ? ?} ? ? ?});} }

(5).git 下載地址GitHub - wyc1411162011/MvcDemo: mvc模式的實例

3.優缺點總結:
優點:mvc采取分層結構結構清晰明了,各個層級分工明確耦合性低

缺點:(1).mvc模式activity充當view和controller這兩種角色,隨著項目擴大activity里面代碼會很多,不適用 復雜的頁面
?????????? (2).view層和model層有交互,有代碼的耦合。
?????????? (3).model層數據操作沒有和activity生命周期綁定,activity結束model數據處理還會有回調,容易引起context的內存溢出

4.問題及解答:
?????????? (1).model層封裝了一層接口為什么要用接口直接的類不是更簡單嗎?
?????????? 答案:個人理解這就是面向接口編程,為了以后好擴展,比如獲取數據的方法變了,直接新加一個實現接口的類,在activity里面換點指向的新對象就行了,符合設計模式里面的開關原則,對內修改關閉,對外擴展開放的原則,鬼知道這個玩意以后會不會,為以后擴展留好后路。
?????????? (2).如果請求方式從okhttp換成retifit怎么辦?
??????????? 答案:網絡請求,最好封裝一層,在model層請求數據,不要用具體的okhttp或者retifit 用自己封裝統一的請求處理,方便以后的全局替換,比如以后又有嶄新的框架了。
?????????? (3).如果有多個model怎么辦 會有多個listener 邏輯處理很混亂?
?????????? 答案:這就要求listener 封裝的足夠通用,這個model能用,其他model也能用,項目封裝幾個通用的listener,讓足夠多的model 層使用。

總結

以上是生活随笔為你收集整理的Android Mvc 模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 永久黄色网址 | 国产在线视频第一页 | 中文字幕精品一区二区精 | 色图av| 一级免费毛片 | 亚洲精品久 | 日韩不卡在线播放 | 天天综合天天做天天综合 | 岛国二区 | 国产美女精品久久久 | 少妇野外性xx老女人野外性xx | 成av人片一区二区三区久久 | 操碰91| 国产丰满大乳奶水在线视频 | 亚洲成av人片一区二区 | 高清毛片aaaaaaaaa郊外 | 久久久欧美精品sm网站 | 91狠狠| 操丝袜少妇| 免费在线a | 国产午夜精品在线观看 | 韩国三级bd高清中字2021 | 国产欧美一区二区精品性色99 | 91在线无精精品入口 | 欧美日本激情 | 顶级嫩模啪啪呻吟不断好爽 | 一级黄色a| 97精品国产97久久久久久免费 | 黑人与日本少妇 | 日韩欧美激情 | 亚洲成人av免费观看 | 精品美女www爽爽爽视频 | 日日噜噜夜夜狠狠久久波多野 | 懂色av中文字幕 | 亚洲一区观看 | 懂色视频在线观看 | 婷婷综合久久 | 无码一区二区三区免费视频 | 亚洲精品人妻无码 | 新91视频在线观看 | 91九色丨porny丨国产jk | 欧美性生交xxxxx久久久 | 午夜免费一区二区 | 亚洲色图视频网站 | 午夜av在线播放 | 丰满人妻一区二区三区46 | 欧美午夜一区二区 | 久久中文网 | 国产午夜精品无码一区二区 | 日本三级吃奶头添泬无码苍井空 | 国产精品一区二区三区免费 | 免费看国产一级片 | 日本电影大尺度免费观看 | 欧美日韩中文视频 | 国产精品久久久久久亚洲毛片 | 免费av在线播放网址 | www.com黄色| 国产精品-区区久久久狼 | 欧美日韩一区二区在线观看视频 | 国产95在线| 深爱激情综合网 | 人人艹在线观看 | 婷婷六月在线 | 日本黄色免费网站 | 少妇厨房愉情理伦bd在线观看 | 欧美成人二区 | 国产亚洲精品久 | 男女在线观看视频 | 国产精品成人网 | 国产福利视频一区二区三区 | 中文字幕日韩av | yjizz国产| 男女激情视频网站 | 成人做爰www免费看视频网站 | 亚欧在线 | 天天射寡妇射 | 色诱久久av | 欧美日韩va| 亚洲区小说区 | 亚洲天堂中文 | 国产日本精品视频 | 欧美日韩精品在线播放 | 韩国三级hd中文字幕叫床浴室 | 亚色成人 | 午夜精品无码一区二区三区 | 理论视频在线观看 | 国产天堂av在线 | 亚洲丝袜在线观看 | 亚洲精品二区三区 | 国产拍拍拍拍拍拍拍拍拍拍拍拍拍 | 一道本一区 | 亚洲综人 | 久久91亚洲人成电影网站 | 亚洲天堂视频网站 | 亚欧综合在线 | 西西人体大胆4444ww张筱雨 | 婷婷六月网 | 久久99激情| 中文字幕色 |