Android中Mvp模式的简单示例

感谢 吴小龙同学 关于MVP模式的文章:http://wuxiaolong.me/2015/09/23/AndroidMVPSample/

根据自己的理解在此基础上省略了一些可能会干扰理解的代码

运行结果:


分包:


准备工作:

1.在Menifest中添加网络权限

2.DataUrl:

public class DataUrl {
   //请求数据需要用到的url
   public static String url = "http://www.weather.com.cn/adat/sk/101010100.html";
}

3.DataBean:

使用插件GsonFormat自动生成,在此省略代码。

4.在gradle中添加添加Gson解析

compile 'com.google.code.gson:gson:2.2.4'

MVP:

Model:

/**
 * Model
 * 进行数据的加载/解析
 */
public class DataModel{
   private MPresenter mPresenter;
   public DataModel(MPresenter mPresenter) {
      this.mPresenter = mPresenter;
   }
   /**
    * 定义一个Handler,传递子线程接受到的数据
    */

   Handler mHandler = new Handler(new Handler.Callback() {
      @Override
      public boolean handleMessage(Message message) {
         String result = message.obj.toString();
         //使用Gson解析数据
         DataBean dataBean = new Gson().fromJson(result, DataBean.class);
         //通知present
         mPresenter.loadDataSuccess(dataBean);
         return false;
      }
   });
   public void loadData() {
      //在子线程中开启网络请求
      new Thread(new Runnable() {
         @Override
         public void run() {
            try {
               URL url = new URL(DataUrl.url);
               URLConnection urlConnection = url.openConnection();
               urlConnection.connect();
               urlConnection.setConnectTimeout(5000);
               InputStream inputStream = urlConnection.getInputStream();
               int len = 0;
               byte[] b = new byte[1024];
               ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
               while ((len = inputStream.read(b)) != -1) {
                  byteArrayOutputStream.write(b,0,len);
               }
               inputStream.close();
               String response = byteArrayOutputStream.toString();
               Message message = new Message();
               message.obj = response;
               //返回结果到主线程
               mHandler.sendMessage(message);
            } catch (MalformedURLException e) {
               e.printStackTrace();
            } catch (IOException e) {
               e.printStackTrace();
            }
         }
      }).start();
   }
}
View:

/**
 * 传递数据的接口
 */
public interface MainView {
   void showData(DataBean bean);
}

/**
 * View层,提供数据展示和监听
 */
public class MainActivity extends AppCompatActivity implements MainView {
   protected TextView tvShowData;
   protected Button btnLoadData;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      //查找控件
      initView();
   }
   private void initView() {
      tvShowData = (TextView) findViewById(R.id.tv_showData);
      btnLoadData = (Button) findViewById(R.id.btn_loadData);
      //点击按钮时执行操作
      btnLoadData.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View view) {
            new MPresenter(MainActivity.this).loadData();
         }
      });
   }
   @Override
   public void showData(DataBean bean) {
      DataBean.WeatherinfoEntity weatherinfo = bean.getWeatherinfo();
      String time = weatherinfo.getTime();
      String city = weatherinfo.getCity();
      String temp = weatherinfo.getTemp();
      String string = " 时间:"+time+" 城市:"+city+" 温度:"+temp;
      tvShowData.setText(string);
   }
}
Presenter:

/**
 * 逻辑操作
 * 传递View的请求到Model,又将Model获取到的数据返回给View
 */
public class MPresenter {
   private DataModel mDataModel;
   private MainView  mMainView;
   public MPresenter(MainView mainView) {
      this.mMainView = mainView;
      mDataModel = new DataModel(this);
   }
   public void loadData() {
      mDataModel.loadData();
   }
   public void loadDataSuccess(DataBean dataBean) {
      mMainView.showData(dataBean);
   }
}








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值