android MVP

目前MVP应该是android开发中应用最多的框架了。
项目目录结构为:
这里写图片描述

VIew层:主要显示ui界面与用户进行交互,声明presenter对象,并等待presenter回传结果,更新ui。
Presenter层:声明model对象并等待model回传,通过接口方式将结果回传到view层。
Model层:传递presenter接口对象,实现数据处理,并将结构回传到presenter。

代码如下:
View层:
package com.example.administrator.mvc_mvp_mvvm.MVC.View;

import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

import com.example.administrator.mvc_mvp_mvvm.MVC.Presenter.OkhttpImpl;
import com.example.administrator.mvc_mvp_mvvm.MVC.Presenter.OkhttpPresenter;
import com.example.administrator.mvc_mvp_mvvm.R;

public class MainActivity extends Activity implements MainPre {
private Button button;
private ImageView imageView;
private final static String URL_IMAGE = “https://www.baidu.com/img/bd_logo1.png“;
private OkhttpPresenter okhttp;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    button = findViewById(R.id.button);
    imageView = findViewById(R.id.image);
    okhttp = new OkhttpImpl(MainActivity.this);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            okhttp.getImage(URL_IMAGE);
        }
    });

}

@Override
public void updateUI(final Bitmap bitmap) {
    //接收presenter的回传
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            imageView.setImageBitmap(bitmap);
        }
    });
}

}

VIew接口:
package com.example.administrator.mvc_mvp_mvvm.MVC.View;

import android.graphics.Bitmap;

public interface MainPre {
void updateUI(Bitmap bitmap);
}

Presenter层:

package com.example.administrator.mvc_mvp_mvvm.MVC.Presenter;

import android.content.Context;
import android.graphics.Bitmap;

import com.example.administrator.mvc_mvp_mvvm.MVC.Model.OkhttpMod;
import com.example.administrator.mvc_mvp_mvvm.MVC.Model.OkhttpModPre;
import com.example.administrator.mvc_mvp_mvvm.MVC.View.MainPre;

public class OkhttpImpl implements OkhttpPresenter {
private MainPre mainPre;//实现View回传接口
private OkhttpModPre okhttpModPre;//实现model接口
public OkhttpImpl(MainPre mainPre){
this.mainPre = mainPre;
okhttpModPre = new OkhttpMod();
}
public void getImage(String url){
//到Moldel层处理数据
okhttpModPre.getImageUrl(url,this);
}

@Override
public void getImageBit(Bitmap bitmap) {
    //接收Model层的回传值
    if(null != mainPre){
        mainPre.updateUI(bitmap);
    }
}

}

Presenter接口:

package com.example.administrator.mvc_mvp_mvvm.MVC.Presenter;

import android.graphics.Bitmap;

public interface OkhttpPresenter {
void getImage(String url);
void getImageBit(Bitmap bitmap);
}

Model层:

package com.example.administrator.mvc_mvp_mvvm.MVC.Model;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

import com.example.administrator.mvc_mvp_mvvm.MVC.Presenter.OkhttpPresenter;

import java.io.IOException;
import java.io.InputStream;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class OkhttpMod implements OkhttpModPre {
private Bitmap bitmap;
public OkhttpMod(){
}
@Override
public void getImageUrl(String url, final OkhttpPresenter okhttpPresenter) {
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder()
.url(url)
.build();

    Call call = okHttpClient.newCall(request);

    call.enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {

        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            InputStream inputStream = response.body().byteStream();
            //通过接口将结果传递给presenter
            bitmap = BitmapFactory.decodeStream(inputStream);
            if(null != okhttpPresenter) {
                okhttpPresenter.getImageBit(bitmap);
            }
        }
    });
}

}

Model接口:

package com.example.administrator.mvc_mvp_mvvm.MVC.Model;

import com.example.administrator.mvc_mvp_mvvm.MVC.Presenter.OkhttpPresenter;

public interface OkhttpModPre {
void getImageUrl(String url, OkhttpPresenter okhttpPresenter);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值