以下为本人学习笔记

 

 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的代码过于冗杂。





Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐