[仅记录]MVP模式下改进请求两条不同网络数据

本文详细介绍了一种基于MVP模式的网络数据加载方案。通过定义INetModel接口及其实现类NetModel,实现了网络数据的异步加载。NetPresenter作为Presenter层,负责调用Model层并处理UI更新。ShowNetData接口定义了View层的行为,NetActivity作为具体View,展示了数据加载的过程。

项目结构

Model层

INetModel

package com.example.admin.mvpsample1.Model;

public interface INetModel {
    void askForNet(NetSourceCallBack callBack);
}

接口的实现类

public class NetModel implements INetModel {
    private String steamData = "";
    private String newsData = "";
    private HttpUrlUtils netUtils;
    private ThreadPoolManager threadPool;
    private String steamUrL = "xxxxx";
    private String newsUrl = "xxxxxx";
    Handler handler = new Handler();

    @Override
    public void askForNet(final NetSourceCallBack callBack) {
        netUtils = new HttpUrlUtils();
        threadPool = ThreadPoolManager.getInstance();
        SteamTask steamTask = new SteamTask();
        NewsTask newsTask = new NewsTask();
        threadPool.putExecutableTasks(steamTask);
        threadPool.putExecutableTasks(newsTask);
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                if (steamData != null && newsData != null) {
                    callBack.onSuccess(steamData, newsData);
                }
                if (steamData != null && newsData == null) {
                    callBack.onFailure("新闻数据请求失败");
                }
                if (steamData == null && newsData != null) {
                    callBack.onFailure("steam数据请求失败");
                } else {
                    callBack.onFailure("连接超时,请检查网络环境");
                }
            }
        }, 2000);

    }

    class SteamTask implements Runnable {
        @Override
        public void run() {
            steamData = netUtils.askFromSteam(steamUrL);
        }
    }

    class NewsTask implements Runnable {
        @Override
        public void run() {
            newsData = netUtils.askFromJvHeNews(newsUrl);
        }
    }
}

NetSourceCallBack

package com.example.admin.mvpsample1.Model;

public interface NetSourceCallBack {
    void onSuccess(String steam,String newsData);

    void onFailure(String errorCode);
}

INetPresent

package com.example.admin.mvpsample1.Presenter;

public interface INetPresent {
    void askForNet();
}

实现类

public class NetPresenter implements INetPresent {
    private ShowNetData showNetview;
    private NetModel netModel;
    public NetPresenter(ShowNetData showNetview,NetModel netModel){
        this.showNetview=showNetview;
        this.netModel=netModel;
    }

    @Override
    public void askForNet() {
        showNetview.showLoading("加载中");
        netModel.askForNet(new NetSourceCallBack() {
            @Override
            public void onSuccess(String steam, String newsData) {
                showNetview.hideLoading();
                showNetview.showResult("加载成功");
                showNetview.setData(steam,newsData);
            }

            @Override
            public void onFailure(String errorCode) {
                showNetview.hideLoading();
                showNetview.showResult("加载失败");

            }
        });
    }
}

ShowNetData

package com.example.admin.mvpsample1.View;

public interface ShowNetData {
    void showLoading(String msg);

    void hideLoading();

    void showResult(String result);

    void setData(String steam,String news);
}

Activity

public class NetActivity extends AppCompatActivity implements ShowNetData{
    private TextView textSteam;
    private TextView textJvHe;
    private NetPresenter presenter;
    private ProgressDialog progressDialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_net);
        inintView();
        presenter.askForNet();
    }

    private void inintView(){
        textSteam=findViewById(R.id.tt1);
        textJvHe=findViewById(R.id.tt2);
        progressDialog = new ProgressDialog(this);
        presenter = new NetPresenter(this, new NetModel());
    }
    @Override
    public void showLoading(String msg) {
        progressDialog.setMessage(msg);
        if (!progressDialog.isShowing()){
            progressDialog.show();
        }
    }

    @Override
    public void hideLoading() {
        if(progressDialog.isShowing()){
            progressDialog.dismiss();
        }
    }

    @Override
    public void showResult(String result) {
        Toast.makeText(NetActivity.this,result,Toast.LENGTH_SHORT).show();
    }

    @Override
    public void setData(String steam, String news) {
        textJvHe.setText(news);
        textSteam.setText(steam);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值