1. 程式人生 > >Android使用MVP實現網路載入資料

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