感谢 吴小龙同学 关于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); } }