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("添加布局");
}
}
}