Android使用MVP实现网络加载数据

一.网络加载接口

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();
 	   }
    }

猜你喜欢

转载自blog.csdn.net/wzj_8899174/article/details/83961286