Android使用MVP實現網路載入資料
阿新 • • 發佈:2018-12-20
一.網路載入介面
public interface ListCallBack<T> {
void onShowSuccess(List<Person.DataBean> result);
void onShowFailer(String msg);
}
二.view層
public interface IListView { //展示成功 void onListView(List<Person.DataBean> listview); //展示失敗 void onFailer(String error); }
三.Model層(處理資料,這裡有網路封裝類)
public class ListModel { public void login(String path, final ListCallBack listCallBack) { HttpUtils httpUtils = new HttpUtils(); httpUtils.getpath(path); httpUtils.getHelpListener(new HttpUtils.GetData() { @Override public void setString(String s) { Gson gson = new Gson(); //這裡有一個類,獲取請求碼 Person person = gson.fromJson(s, Person.class); List<Person.DataBean> data = person.getData(); if (person.getCode() == 1) { listCallBack.onShowSuccess(data); } else { listCallBack.onShowFailer("展示失敗"); } } }); } }
四.Presenter層
public class ListPresenter { private IListView iLoginView; private ListModel listModel; public ListPresenter(IListView iLoginView) { this.iLoginView = iLoginView; listModel = new ListModel(); } public void login(String path) { listModel.login(path, new ListCallBack<List>() { @Override public void onShowSuccess(List<Person.DataBean> result) { iLoginView.onListView(result); } @Override public void onShowFailer(String msg) { } }); } }
五.在Activity層
public class ShowActivity extends AppCompatActivity implements IListView, View.OnClickListener {
private SearchView searchview;
private Button change;
private GridView gridview;
private ListPresenter listPresenter;
private String path = "http://www.xieast.com/api/news/news.php?page=1";
private Button mButtonExit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show);
initView();
//初始化控制元件
init();
searchview.setQueryHint("請輸入搜尋內容");
//點選掃一掃
change.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(ShowActivity.this, ScanActivity.class));
}
});
listPresenter.login(path);
}
private void init() {
searchview = (SearchView) findViewById(R.id.searchview);
change = (Button) findViewById(R.id.change);
gridview = (GridView) findViewById(R.id.gridview);
listPresenter = new ListPresenter(this);
}
@Override
public void onListView(List<Person.DataBean> listview) {
MyAdapter myAdapter = new MyAdapter(ShowActivity.this, listview);
gridview.setAdapter(myAdapter);
}
@Override
public void onFailer(String error) {
Toast.makeText(this, "展示失敗", Toast.LENGTH_SHORT).show();
}
}