From c2daf803564faee9cc56238328cb6715fa9b6333 Mon Sep 17 00:00:00 2001 From: WuXiaolong Date: Mon, 18 Jan 2016 11:11:36 +0800 Subject: [PATCH] MainModelBean --- .idea/misc.xml | 2 +- .../androidmvpsample/model/MainModel.java | 69 +++++++++++-------- .../androidmvpsample/model/MainModelBean.java | 43 ++++++++++++ .../presenter/IMainPresenter.java | 13 ++++ .../presenter/MainPresenter.java | 61 ++++++---------- .../androidmvpsample/ui/MainActivity.java | 57 +++++++-------- .../androidmvpsample/view/MainView.java | 4 +- app/src/main/res/layout/activity_main.xml | 3 +- app/src/main/res/values/strings.xml | 5 +- 9 files changed, 148 insertions(+), 109 deletions(-) create mode 100644 app/src/main/java/com/wuxiaolong/androidmvpsample/model/MainModelBean.java create mode 100644 app/src/main/java/com/wuxiaolong/androidmvpsample/presenter/IMainPresenter.java diff --git a/.idea/misc.xml b/.idea/misc.xml index 7158618..cca2cda 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -37,7 +37,7 @@ - + diff --git a/app/src/main/java/com/wuxiaolong/androidmvpsample/model/MainModel.java b/app/src/main/java/com/wuxiaolong/androidmvpsample/model/MainModel.java index 7228065..914ec52 100644 --- a/app/src/main/java/com/wuxiaolong/androidmvpsample/model/MainModel.java +++ b/app/src/main/java/com/wuxiaolong/androidmvpsample/model/MainModel.java @@ -1,43 +1,52 @@ package com.wuxiaolong.androidmvpsample.model; +import com.loopj.android.http.AsyncHttpClient; +import com.loopj.android.http.JsonHttpResponseHandler; +import com.wuxiaolong.androidmvpsample.presenter.IMainPresenter; + +import org.json.JSONException; +import org.json.JSONObject; + +import cz.msebera.android.httpclient.Header; + /** * Created by WuXiaolong on 2015/9/23. + * 业务具体处理,包括负责存储、检索、操纵数据等 */ public class MainModel { - String city; - String wd; - String ws; - String time; + IMainPresenter mIMainPresenter; - public String getCity() { - return city; + public MainModel(IMainPresenter iMainPresenter) { + this.mIMainPresenter = iMainPresenter; } - public void setCity(String city) { - this.city = city; + public void loadData() { + AsyncHttpClient asyncHttpClient = new AsyncHttpClient(); + asyncHttpClient.get("http://www.weather.com.cn/adat/sk/101010100.html", new JsonHttpResponseHandler() { + @Override + public void onSuccess(int statusCode, Header[] headers, JSONObject response) { + super.onSuccess(statusCode, headers, response); + try { + MainModelBean mainModelBean = new MainModelBean(); + JSONObject weatherinfo = response.getJSONObject("weatherinfo"); + mainModelBean.setCity(weatherinfo.getString("city")); + mainModelBean.setWd(weatherinfo.getString("WD")); + mainModelBean.setWs(weatherinfo.getString("WS")); + mainModelBean.setTime(weatherinfo.getString("time")); + mIMainPresenter.loadDataSuccess(mainModelBean); + } catch (JSONException e) { + e.printStackTrace(); + } + + } + + @Override + public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) { + super.onFailure(statusCode, headers, throwable, errorResponse); + mIMainPresenter.loadDataFailure(); + } + }); } - public String getWd() { - return wd; - } - public void setWd(String wd) { - this.wd = wd; - } - - public String getWs() { - return ws; - } - - public void setWs(String ws) { - this.ws = ws; - } - - public String getTime() { - return time; - } - - public void setTime(String time) { - this.time = time; - } } diff --git a/app/src/main/java/com/wuxiaolong/androidmvpsample/model/MainModelBean.java b/app/src/main/java/com/wuxiaolong/androidmvpsample/model/MainModelBean.java new file mode 100644 index 0000000..ad3c253 --- /dev/null +++ b/app/src/main/java/com/wuxiaolong/androidmvpsample/model/MainModelBean.java @@ -0,0 +1,43 @@ +package com.wuxiaolong.androidmvpsample.model; + +/** + * Created by WuXiaolong on 2015/9/23. + */ +public class MainModelBean { + private String city; + private String wd; + private String ws; + private String time; + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getWd() { + return wd; + } + + public void setWd(String wd) { + this.wd = wd; + } + + public String getWs() { + return ws; + } + + public void setWs(String ws) { + this.ws = ws; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } +} diff --git a/app/src/main/java/com/wuxiaolong/androidmvpsample/presenter/IMainPresenter.java b/app/src/main/java/com/wuxiaolong/androidmvpsample/presenter/IMainPresenter.java new file mode 100644 index 0000000..bebed1f --- /dev/null +++ b/app/src/main/java/com/wuxiaolong/androidmvpsample/presenter/IMainPresenter.java @@ -0,0 +1,13 @@ +package com.wuxiaolong.androidmvpsample.presenter; + +import com.wuxiaolong.androidmvpsample.model.MainModelBean; + +/** + * Created by WuXiaolong on 2015/9/23. + * 此接口作用是连接Model + */ +public interface IMainPresenter { + void loadDataSuccess(MainModelBean mainModelBean); + + void loadDataFailure(); +} diff --git a/app/src/main/java/com/wuxiaolong/androidmvpsample/presenter/MainPresenter.java b/app/src/main/java/com/wuxiaolong/androidmvpsample/presenter/MainPresenter.java index bd07e19..61a0093 100644 --- a/app/src/main/java/com/wuxiaolong/androidmvpsample/presenter/MainPresenter.java +++ b/app/src/main/java/com/wuxiaolong/androidmvpsample/presenter/MainPresenter.java @@ -1,24 +1,20 @@ package com.wuxiaolong.androidmvpsample.presenter; -import com.loopj.android.http.AsyncHttpClient; -import com.loopj.android.http.JsonHttpResponseHandler; import com.wuxiaolong.androidmvpsample.model.MainModel; +import com.wuxiaolong.androidmvpsample.model.MainModelBean; import com.wuxiaolong.androidmvpsample.view.MainView; -import org.json.JSONException; -import org.json.JSONObject; - -import cz.msebera.android.httpclient.Header; - /** * Created by WuXiaolong on 2015/9/23. - * 业务具体处理 + * View和Model的桥梁,它从Model层检索数据后,返回给View层 */ -public class MainPresenter implements Presenter { +public class MainPresenter implements Presenter, IMainPresenter { private MainView mMainView; + private MainModel mMainModel; public MainPresenter(MainView view) { attachView(view); + mMainModel = new MainModel(this); } @Override @@ -26,38 +22,25 @@ public class MainPresenter implements Presenter { this.mMainView = view; } - public void loadData() { - mMainView.showProgress(); - AsyncHttpClient asyncHttpClient = new AsyncHttpClient(); - asyncHttpClient.get("http://www.weather.com.cn/adat/sk/101010100.html", new JsonHttpResponseHandler() { - @Override - public void onSuccess(int statusCode, Header[] headers, JSONObject response) { - super.onSuccess(statusCode, headers, response); - try { - MainModel mainModel = new MainModel(); - JSONObject weatherinfo = response.getJSONObject("weatherinfo"); - mainModel.setCity(weatherinfo.getString("city")); - mainModel.setWd(weatherinfo.getString("WD")); - mainModel.setWs(weatherinfo.getString("WS")); - mainModel.setTime(weatherinfo.getString("time")); - mMainView.showData(mainModel); - mMainView.hideProgress(); - } catch (JSONException e) { - e.printStackTrace(); - } - - } - - @Override - public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) { - super.onFailure(statusCode, headers, throwable, errorResponse); - mMainView.hideProgress(); - } - }); - } - @Override public void detachView() { this.mMainView = null; } + + public void loadData() { + mMainView.showProgress(); + mMainModel.loadData(); + } + + + @Override + public void loadDataSuccess(MainModelBean mainModelBean) { + mMainView.showData(mainModelBean); + mMainView.hideProgress(); + } + + @Override + public void loadDataFailure() { + mMainView.hideProgress(); + } } diff --git a/app/src/main/java/com/wuxiaolong/androidmvpsample/ui/MainActivity.java b/app/src/main/java/com/wuxiaolong/androidmvpsample/ui/MainActivity.java index 18e1b00..35ccdcb 100644 --- a/app/src/main/java/com/wuxiaolong/androidmvpsample/ui/MainActivity.java +++ b/app/src/main/java/com/wuxiaolong/androidmvpsample/ui/MainActivity.java @@ -1,22 +1,25 @@ package com.wuxiaolong.androidmvpsample.ui; import android.os.Bundle; +import android.os.Handler; import android.support.v7.app.AppCompatActivity; -import android.view.Menu; -import android.view.MenuItem; import android.view.View; import android.widget.ProgressBar; import android.widget.TextView; import com.wuxiaolong.androidmvpsample.R; -import com.wuxiaolong.androidmvpsample.model.MainModel; +import com.wuxiaolong.androidmvpsample.model.MainModelBean; import com.wuxiaolong.androidmvpsample.presenter.MainPresenter; import com.wuxiaolong.androidmvpsample.view.MainView; +/** + * Created by WuXiaolong on 2015/9/23. + * 由Activity/Fragment实现View里方法,包含一个Presenter的引用 + */ public class MainActivity extends AppCompatActivity implements MainView { - ProgressBar mProgressBar; - TextView text; - MainPresenter mMainPresenter; + private ProgressBar mProgressBar; + private TextView text; + private MainPresenter mMainPresenter; @Override protected void onCreate(Bundle savedInstanceState) { @@ -30,7 +33,14 @@ public class MainActivity extends AppCompatActivity implements MainView { text = (TextView) findViewById(R.id.text); mProgressBar = (ProgressBar) findViewById(R.id.mProgressBar); mMainPresenter = new MainPresenter(this); - mMainPresenter.loadData(); + //制造延迟效果 + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + mMainPresenter.loadData(); + } + }, 2000); + } @Override @@ -40,11 +50,12 @@ public class MainActivity extends AppCompatActivity implements MainView { } @Override - public void showData(MainModel mainModel) { - text.setText("城市:" + mainModel.getCity() - + "\n风向:" + mainModel.getWd() - + "\n风级:" + mainModel.getWs() - + "\n发布时间:" + mainModel.getTime()); + public void showData(MainModelBean mainModelBean) { + String showData = getResources().getString(R.string.city) + mainModelBean.getCity() + + getResources().getString(R.string.wd) + mainModelBean.getWd() + + getResources().getString(R.string.ws) + mainModelBean.getWs() + + getResources().getString(R.string.time) + mainModelBean.getTime(); + text.setText(showData); } @@ -58,27 +69,5 @@ public class MainActivity extends AppCompatActivity implements MainView { mProgressBar.setVisibility(View.GONE); } - @Override - public boolean onCreateOptionsMenu(Menu menu) { - // Inflate the menu; this adds items to the action bar if it is present. - getMenuInflater().inflate(R.menu.menu_main, menu); - return true; - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - // Handle action bar item clicks here. The action bar will - // automatically handle clicks on the Home/Up button, so long - // as you specify a parent activity in AndroidManifest.xml. - int id = item.getItemId(); - - //noinspection SimplifiableIfStatement - if (id == R.id.action_settings) { - return true; - } - - return super.onOptionsItemSelected(item); - } - } diff --git a/app/src/main/java/com/wuxiaolong/androidmvpsample/view/MainView.java b/app/src/main/java/com/wuxiaolong/androidmvpsample/view/MainView.java index c44c909..45805de 100644 --- a/app/src/main/java/com/wuxiaolong/androidmvpsample/view/MainView.java +++ b/app/src/main/java/com/wuxiaolong/androidmvpsample/view/MainView.java @@ -1,13 +1,13 @@ package com.wuxiaolong.androidmvpsample.view; -import com.wuxiaolong.androidmvpsample.model.MainModel; +import com.wuxiaolong.androidmvpsample.model.MainModelBean; /** * Created by WuXiaolong on 2015/9/23. * 处理业务需要哪些方法 */ public interface MainView { - void showData(MainModel mainModel); + void showData(MainModelBean mainModelBean); void showProgress(); diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index b3804eb..e12a7d2 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -11,8 +11,7 @@ + android:layout_height="wrap_content" /> AndroidMVPSample - Hello world! Settings + 城市: + \n风向: + \n风级: + \n发布时间: