//首先粘贴上三个XlistView包和Xml以及图片String类切记主Main方法implements XListView.IXListViewListener
public class MainActivity extends AppCompatActivity implements XListView.IXListViewListener{
private XListView mXlv;
//=号后面表示页码 1表示第一页
private static final String JSON_URL = "http://www.93.gov.cn/93app/data.do?channelId=2&startNum=";
int pageNum = 1;
private SuperClass superClass;
private List<SuperClass.DataBean> data;
private MyAdapter myAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_xlist);
initView();
//进入系统,默认访问第一页数据
new AsyncTask<String,Integer,String>(){
@Override
protected String doInBackground(String... params) {
String jsonStr = new NetWorkUtils().getJsonByHttpUrlConnection(JSON_URL + pageNum);
return jsonStr;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
Gson gson = new Gson();
superClass = gson.fromJson(s, SuperClass.class);
//得到要是展示的数据
data = superClass.getData();
//把data配置给xlistview
myAdapter = new MyAdapter(MainActivity.this, data);
mXlv.setAdapter(myAdapter);
}
}.execute();
}
private void initView() {
mXlv = (XListView) findViewById(R.id.xlv);
mXlv.setPullLoadEnable(true);//设置xlistview可以刷新,加载
mXlv.setXListViewListener(this);
}
/**
* 关闭刷新和加载
*/
public void onLoad(){
mXlv.stopLoadMore();
mXlv.stopRefresh();
mXlv.setRefreshTime("刚刚");
}
/**
* 下拉刷新,会进入这个方法
*/
@Override
public void onRefresh() {
//重新加载第一页(刷新)
Toast.makeText(this,"下拉刷新",Toast.LENGTH_SHORT).show();
pageNum = 1;//下拉刷新的时候,把页码恢复到第一页
new AsyncTask<String,Integer,String>(){
@Override
protected String doInBackground(String... params) {
String jsonStr = new NetWorkUtils().getJsonByHttpUrlConnection(JSON_URL + pageNum);
return jsonStr;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
Gson gson = new Gson();
superClass = gson.fromJson(s, SuperClass.class);
//得到要是展示的数据
data = superClass.getData();
//把data配置给xlistview
myAdapter = new MyAdapter(MainActivity.this, data);
mXlv.setAdapter(myAdapter);
onLoad();
}
}.execute();
}
/**
* 上拉加载,会进入这个方法
*/
@Override
public void onLoadMore() {
//加载下一页,显示在listview中
Toast.makeText(this,"上拉加载",Toast.LENGTH_SHORT).show();
pageNum++;//页码加1,下一页
new AsyncTask<String,Integer,String>(){
@Override
protected String doInBackground(String... params) {
String jsonStr = new NetWorkUtils().getJsonByHttpUrlConnection(JSON_URL + pageNum);
return jsonStr;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
Gson gson = new Gson();
superClass = gson.fromJson(s, SuperClass.class);
//得到要是展示的数据
List<SuperClass.DataBean> newPageData = superClass.getData();//新的一页的数据
data.addAll(newPageData);//把新请求到的数据,追加到所有的数据(最开始的集合)的集合中
myAdapter.notifyDataSetChanged();//刷新适配器,展示新的数据
onLoad();//停止刷新和加载
}
}.execute();
}
}
//网络请求
public class NetWorkUtils {
public String getJsonByHttpUrlConnection(String jsonUrl){
URL url = null;
HttpURLConnection httpURLConnection = null;
String jsonStr = "";
try {
url = new URL(jsonUrl);//创建URL对象,连接JSON_URL对应的服务器
httpURLConnection = (HttpURLConnection) url.openConnection();//打开连接
httpURLConnection.setConnectTimeout(5000);//设置请求时长为5秒
httpURLConnection.setReadTimeout(5000);//设置读取服务器响应数据的时长
int resCode = httpURLConnection.getResponseCode();//得到响应结果码
if(resCode == 200){//表示响应成功,可以获得相应的额结果
//得到响应的结果,,服务器响应的输入流
InputStream inputStream = httpURLConnection.getInputStream();
byte[] buffers = new byte[1024];
int length = 0;
while((length = inputStream.read(buffers)) != -1){//本次循环成立,说明读取到了数据
jsonStr += new String(buffers,0,length);
}
//循环完毕,读取数据完毕
Log.d("main",jsonStr);
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return jsonStr;
}
}
//适配器
public class MyAdapter extends BaseAdapter {
private Context context;
private List<SuperClass.DataBean> data;
public MyAdapter(Context context, List<SuperClass.DataBean> data) {
this.context = context;
this.data = data;
}
@Override
public int getCount() {
return data.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) {
holder = new ViewHolder();
convertView = View.inflate(context, R.layout.listview_item_layout, null);
holder.img = (ImageView) convertView.findViewById(R.id.imageView);
holder.name = (TextView) convertView.findViewById(R.id.textView);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
//赋值
//得到要显示的值
SuperClass.DataBean dataBean = data.get(position);
holder.name.setText(dataBean.getTITLE());
return convertView;
}
class ViewHolder {
TextView name;
ImageView img;
}
}