架构:Android的MVC

定义

全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写。是业务逻辑、数据、界面显示分离的方法组织代码,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。

效果图

这里写图片描述 请求前* 请求后 这里写图片描述

Android中使用MVC

  • 模型层(Model)
  • 视图层(View)
  • 控制层(Controller)

详细使用

模型层(Model)

业务模型,建立的数据结构和相关的类,就可以理解为Android的Model,Model是与View无关,而与业务逻辑相关。对数据库的操作、对网络、业务计算等操作等的操作都应该在Model里面处理。

代码如下:
1.先写一个接口

public interface Model {
    void getData(String url,ModelListener modelListener);
}

2.继承接口进行数据请求

/**
 * Created by Bingsman on 2016/8/2.
 */
public class ModelUrl implements Model {
    @Override
    public void getData(String url, final ModelListener modelListener) {
        OkHttpClient okHttpClient = new OkHttpClient();
//        RequestBody requestBody =new FormEncodingBuilder().add().build();
        Request request = new Request.Builder().url(url).get().build();
        okHttpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Request request, IOException e) {

            }

            @Override
            public void onResponse(Response response) throws IOException {
                if(response.isSuccessful()){
                    String json = response.body().string();
                    if (modelListener != null) {
                        modelListener.onSuccess(json);
                    } else {
                        modelListener.onError();
                    }
                }
            }
        });
    }
}

视图层(View)

使用XML文件进行绘制应用界面,这些XML可以理解为Android的View。而且便于后期界面的修改。如果逻辑与界面对应的id不变化,则代码不用修改,大大增强了代码的可维护性。

这里就是布局文件,如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">


    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="18dp"
        android:text="请求数据" />

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="18dp"
        android:src="@mipmap/ic_launcher"
        android:text="无数据" />
</LinearLayout>

控制层(Controller)

Android的控制层的就是Activity。所以尽量不要在Activity中写逻辑,要将业务逻辑通过Activity转接到Model业务逻辑层处理,还有就是Android中的Actiivity的响应时间是5s,如果耗时的操作放在这里,程序就很容易崩溃。

控制层,代码如下

public class ControllerActivtiy extends Activity {
    Model model;
    String url = "http://image.baidu.com/channel/listjson?pn=1&rn=1&tag1=美女&tag2=全部&ie=utf8";

    private Button button;
    private ImageView imageView;
    private String imageUrl;

    Gson gson;

    private Bitmap bitm;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity);
        initView();
        initData();
    }

    public void initView() {
        button = findView(R.id.button);
        imageView = findView(R.id.imageView);
    }

    public void initData() {
        gson = new Gson();
        model = new ModelUrl();
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                model.getData(url, new ModelListener() {
                    @Override
                    void onSuccess(String result) {
                        super.onSuccess(result);
                        PictureBean pictureBean = gson.fromJson(result, PictureBean.class);
                        List<PictureBean.DataBean> list = pictureBean.getData();
                        if (list != null) {
                            imageUrl = list.get(0).getImage_url();
                            bitm = getHttpBitmap(imageUrl);
                            Message message = new Message();
                            handler.sendEmptyMessage(0);
                        }
                        //得到可用的图片
                    }

                    @Override
                    void onError() {
                        super.onError();
                    }
                });
            }
        });

    }

    Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            imageView.setImageBitmap(bitm);
        }
    };

    /**
     * 获取网落图片资源
     * @param url
     * @return
     */
    public static Bitmap getHttpBitmap(String url){
        URL myFileURL;
        Bitmap bitmap=null;
        try{
            myFileURL = new URL(url);
            //获得连接
            HttpURLConnection conn=(HttpURLConnection)myFileURL.openConnection();
            //设置超时时间为6000毫秒,conn.setConnectionTiem(0);表示没有时间限制
            conn.setConnectTimeout(6000);
            //连接设置获得数据流
            conn.setDoInput(true);
            //不使用缓存
            conn.setUseCaches(false);
            //这句可有可无,没有影响
            //conn.connect();
            //得到数据流
            InputStream is = conn.getInputStream();
            //解析得到图片
            bitmap = BitmapFactory.decodeStream(is);
            //关闭数据流
            is.close();
        }catch(Exception e){
            e.printStackTrace();
        }
        return bitmap;

    }


    protected <T extends View> T findView(int id) {
        //return返回view时,加上泛型T
        return (T) findViewById(id);
    }
}

源码下载地址(看源码的MVC文件): 点击下载

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

记住我的名字啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值