MVP

Activty

package com.example.daymodule1206;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

import com.example.daymodule1206.adapter.MyAdapter;
import com.example.daymodule1206.bean.MyData;
import com.example.daymodule1206.presenter.PresenterImpl;
import com.example.daymodule1206.view.IView;
import com.example.xlistviewlibrary.XListView;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity implements IView,XListView.IXListViewListener {

    private String mUrl="http://www.xieast.com/api/news/news.php?page=";
    private XListView xListView;
    private int mindex=1;

    private ArrayList<MyData.DataBean> mList=new ArrayList<>();
    private PresenterImpl presenter;
    private MyAdapter myAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initViews();

        presenter = new PresenterImpl(this);
        myAdapter = new MyAdapter(mList,this);
        xListView.setAdapter(myAdapter);
        presenter.startRequse(mUrl,mindex);


    }

    public void initViews(){
        xListView = findViewById(R.id.XList_View);
         xListView.setPullLoadEnable(true);
        xListView.setXListViewListener(this);
    }


    @Override
    public void success(Object data) {

        MyData myData= (MyData) data;
       mList.addAll(myData.getData());
       myAdapter.notifyDataSetChanged();
         stopReflush();
    }

    public void stopReflush(){
        xListView.stopRefresh();
        xListView.stopLoadMore();
        xListView.setRefreshTime("完成");

    }
    @Override
    public void error(Object error) {

    }

    @Override
    public void onRefresh() {
         mindex=1;
        mList.clear();
        presenter.startRequse(mUrl,mindex);
    }

    @Override
    public void onLoadMore() {

        mindex++;
        presenter.startRequse(mUrl,mindex);
    }
}

IView層

package com.example.daymodule1206.view;

public interface IView<T> {

  void success(T data);
  void error(T error);

}

Model層

package com.example.daymodule1206.model;

import com.example.daymodule1206.callback.MyCallBack;

public interface Model {
    void getData(String url, int index, MyCallBack callBack);
}

** ModelImpl層**

package com.example.daymodule1206.model;

import android.os.AsyncTask;

import com.example.daymodule1206.bean.MyData;
import com.example.daymodule1206.callback.MyCallBack;
import com.example.daymodule1206.utils.HttpUtils;
import com.google.gson.Gson;

import java.io.IOException;

public class ModelImpl implements Model {

    private MyCallBack callBack;

    @Override
    public void getData(String url, int index, MyCallBack callBack) {

        this.callBack = callBack;
        new MyTask().execute(url + index);
    }

    class MyTask extends AsyncTask<String, Void, MyData> {

        @Override
        protected MyData doInBackground(String... strings) {
            try {
                String jsonStr = HttpUtils.get(strings[0]);
                Gson gson = new Gson();
                MyData myData = gson.fromJson(jsonStr, MyData.class);
                return myData;
            } catch (IOException e) {
                callBack.error(e.getMessage() + "出現異常");
                e.printStackTrace();
            }

            return null;
        }

        @Override
        protected void onPostExecute(MyData myData) {
            super.onPostExecute(myData);

            callBack.setData(myData);
        }
    }

}

IPresenter層

package com.example.daymodule1206.presenter;

public interface IPresenter {
    void startRequse(String url,int index);
}

PresenterImpl層

package com.example.daymodule1206.presenter;

import com.example.daymodule1206.callback.MyCallBack;
import com.example.daymodule1206.model.ModelImpl;
import com.example.daymodule1206.view.IView;

public class PresenterImpl implements IPresenter {
    private ModelImpl model;
    private IView iView;

    public PresenterImpl(IView iView) {
        this.iView = iView;
          model=new ModelImpl();
    }

    @Override
    public void startRequse(final String url, final int index) {

        model.getData(url, index, new MyCallBack() {
            @Override
            public void setData(Object user) {
                iView.success(user);
            }

            @Override
            public void error(Object error) {
             iView.error(error);
            }
        });

    }
}

MyCallBack

package com.example.daymodule1206.callback;

public interface MyCallBack<T> {
    void setData(T user);
    void error(T error);
}

HttpUtils

package com.example.daymodule1206.utils;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpUtils {
    public static String get(String urlStr) throws IOException {
        URL url=new URL(urlStr);
       HttpURLConnection connection= (HttpURLConnection) url.openConnection();
       connection.setRequestMethod("GET");
       connection.setConnectTimeout(5000);
        InputStream stream = connection.getInputStream();
        String input = getInput(stream);
        return input;
    }

    public static String getInput(InputStream stream) throws IOException {
        BufferedReader reader=new BufferedReader(new InputStreamReader(stream));
        StringBuffer buffer=new StringBuffer();
        String con=null;
        while ((con=reader.readLine())!=null){
            buffer.append(con);
        }
       return buffer.toString();
    }

}

** MyAdapter**

package com.example.daymodule1206.adapter;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.example.daymodule1206.R;
import com.example.daymodule1206.bean.MyData;

import java.util.ArrayList;

public class MyAdapter extends BaseAdapter {
    private ArrayList<MyData.DataBean> mList;
    private Context mContext;

    public MyAdapter(ArrayList<MyData.DataBean> mList, Context mContext) {
        this.mList = mList;
        this.mContext = mContext;
    }

    @Override
    public int getCount() {
        return mList.size();
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder=null;
        if(convertView==null){

            convertView=View.inflate(mContext, R.layout.list_item,null);
            holder=new ViewHolder();
            holder.Img=convertView.findViewById(R.id.Img);
            holder.Text_View=convertView.findViewById(R.id.Text_View);
            convertView.setTag(holder);
        }else{
            holder= (ViewHolder) convertView.getTag();

        }
        Glide.with(mContext).load(mList.get(position).getThumbnail_pic_s()).into(holder.Img);
        holder.Text_View.setText(mList.get(position).getTitle());

        return convertView;
    }

    class ViewHolder{

        ImageView Img;
        TextView Text_View;

    }
}

BaseActivity

package com.example.daymodule1206.base;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;

public abstract class BaseActivity extends AppCompatActivity implements View.OnClickListener {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    protected abstract int getLayout();
    protected abstract void initViews();
    protected abstract void setOnClick();
    protected abstract void processLogic();

    void init(){
        if(getLayout()!=0){
            setContentView(getLayout());
            initViews();
            setOnClick();
            processLogic();
        }else{
            throw new IllegalStateException("添加布局");
        }

    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章