学习笔记,初对Android Studio的MVC模式的理解,附带demo
以下为本人学习笔记 Android Studio的MVC模式,顾名思义就是Model,View,Controller,三个部分。开发时尽量将三个部分分开,这样修改代码时,可以做到只修改一个部分,不用大动干戈。此图是MVC模式的详解,可以这么理解View视图使用户人机交换,读取信息传给Controller,之后通过模型进行一些耗时的操作(例如:访问网络等),之后根据要求来更新数据。主要是要分装,可
以下为本人学习笔记
Android Studio的MVC模式,顾名思义就是Model,View,Controller,三个部分。开发时尽量将三个部分分开,这样修改代码时,可以做到只修改一个部分,不用大动干戈。
此图是MVC模式的详解,可以这么理解View视图使用户人机交换,读取信息传给Controller,之后通过模型进行一些耗时的操作(例如:访问网络等),之后根据要求来更新数据。主要是要分装,可以将.xml看成View。Activity看成Controller。
以下是demo:是一个请求网站并返回,显示在textview上的小程序。
点击了button后会显示请求返回的数据。
View视图:
activity_main.xml
<?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"
tools:context=".MainActivity">
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button" />
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView" />
</ScrollView>
</LinearLayout>
Model模型:
接口KpListener.java
package com.example.mvc_style_controller.model;
public interface KpListener {
void onSucess(String response);
}
接口Kpmodel.java
package com.example.mvc_style_controller.model;
public interface Kpmodel {
void getKpListen(KpListener listener);
}
类KpModel_Complete
package com.example.mvc_style_controller.model; import android.util.Log; import java.io.IOException; import okhttp3.Call; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; public class KpModel_Complete implements Kpmodel { public static void sendOkHttpRequest(final String address, final okhttp3.Callback callback) { OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url(address) .build(); client.newCall(request).enqueue(callback); } @Override public void getKpListen(final KpListener listener) { sendOkHttpRequest("https://www.sojson.com/open/api/weather/json.shtml?city=深圳",new okhttp3.Callback(){ @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { String responseData =response.body().string(); listener.onSucess(responseData); } }); } }
其中用到了sendOkHttpRequest函数这个用来访问网站,来便利以后请求网站都可以直接调用这个函数,不用再写,非常方便。
Contlloer:控制器
Maintivity
package com.example.mvc_style_controller; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import com.example.mvc_style_controller.model.KpListener; import com.example.mvc_style_controller.model.*; public class MainActivity extends AppCompatActivity implements KpListener{ private Button btnMain; private TextView tenMain; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); btnMain.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { KpModel_Complete kpModel_complete=new KpModel_Complete(); kpModel_complete.getKpListen(MainActivity.this); } }); } public void init() { btnMain=(Button)findViewById(R.id.button); tenMain=(TextView)findViewById(R.id.textView); } @Override public void onSucess(final String response) { runOnUiThread(new Runnable() { @Override public void run() { tenMain.setText(response); } }); } }
里面已经写好了各个函数。
总结:用Maintivity实现KpListener接口来重写onSucess()函数
同样的KpModel_Complete实现Kpmodel接口 getKpListener()函数
思路就是视图和控制器交互,点击button之后控制器调用getKpListener(Mainactivity.this)函数进行入到模型model,之后model访问网站取得返回值,再调用onSucess()来设置textview显示在View中。
优点:完成MVC的分离了。
缺点:model的代码过于冗杂。
更多推荐
所有评论(0)