MainActivity
package com.example.a08_xlistview_demo; import android.os.AsyncTask; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget.Toast; import com.example.a08_xlistview_demo.view.XListView; import com.google.gson.Gson; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; public class MainActivity extends AppCompatActivity implements XListView.IXListViewListener { private XListView xlv; private List<DataDataBean.ResultsBean> list=new ArrayList<DataDataBean.ResultsBean>(); private MyAdapter adapter; private int NUM=10; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); xlv = (XListView) findViewById(R.id.xlv); xlv.setPullRefreshEnable(true); xlv.setPullLoadEnable(true); xlv.setXListViewListener(this); getDataFromNet(); } private void getDataFromNet() { AsyncTask<Void,Void,String> asyncTask=new AsyncTask<Void, Void, String>() { @Override protected String doInBackground(Void... voids) { String path = "http://gank.io/api/data/Android/10/"+NUM; try { URL url = new URL(path); HttpURLConnection connection= (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setReadTimeout(5000); connection.setConnectTimeout(5000); int responseCode = connection.getResponseCode(); if (responseCode==200){ InputStream inputStream = connection.getInputStream(); String json=streamTostring(inputStream,"utf-8"); return json; } } catch (Exception e) { e.printStackTrace(); } return ""; } @Override protected void onPostExecute(String json) { Gson gson = new Gson(); DataDataBean dataDataBean = gson.fromJson(json, DataDataBean.class); list.addAll(dataDataBean.getResults()); setAdapter(); xlv.stopLoadMore(); } }; asyncTask.execute(); } private void setAdapter() { if (adapter==null){ adapter = new MyAdapter(MainActivity.this,list); xlv.setAdapter(adapter); }else { adapter.notifyDataSetChanged(); } } private String streamTostring(InputStream inputStream, String charset) { try { InputStreamReader inputStreamReader = new InputStreamReader(inputStream,charset); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); String s=null; StringBuffer buffer=new StringBuffer(); while ((s=bufferedReader.readLine())!=null){ buffer.append(s); } bufferedReader.close(); return buffer.toString(); } catch (Exception e) { e.printStackTrace(); } return null; } @Override public void onRefresh() { NUM--; if (NUM>0){ refreshData(); }else { Toast.makeText(MainActivity.this,"没有最新数据了",Toast.LENGTH_SHORT).show(); xlv.stopRefresh();; } } private void refreshData() { AsyncTask<Void,Void,String> asyncTask=new AsyncTask<Void, Void, String>() { @Override protected String doInBackground(Void... voids) { String path = "http://gank.io/api/data/Android/10/"+NUM; try { URL url = new URL(path); HttpURLConnection connection= (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setReadTimeout(5000); connection.setConnectTimeout(5000); int responseCode = connection.getResponseCode(); if (responseCode==200){ InputStream inputStream = connection.getInputStream(); String json=streamTostring(inputStream,"utf-8"); return json; } } catch (Exception e) { e.printStackTrace(); } return ""; } @Override protected void onPostExecute(String json) { Gson gson = new Gson(); DataDataBean dataDataBean = gson.fromJson(json, DataDataBean.class); list.addAll(0,dataDataBean.getResults()); setAdapter(); xlv.stopLoadMore(); Date data=new Date(System.currentTimeMillis()); SimpleDateFormat simpleDateFormat=new SimpleDateFormat("HH:mm"); String time=simpleDateFormat.format(data); xlv.setRefreshTime(time); } }; asyncTask.execute(); } @Override public void onLoadMore() { NUM++; getDataFromNet(); } }
---------------------------------------------------------------------------------------
MyAdapter
---------------------------------------------------------------------------------------
package com.example.a08_xlistview_demo; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; import java.util.List; /** * Created by lenovo on 2017/9/11. */ public class MyAdapter extends BaseAdapter{ Context context; List<DataDataBean.ResultsBean> list; public MyAdapter(Context context,List<DataDataBean.ResultsBean> list){ this.context=context; this.list=list; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int i) { return list.get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View view, ViewGroup viewGroup) { if (view==null){ view=View.inflate(context,R.layout.list_item,null); } TextView textView=view.findViewById(R.id.list_item_textview); return view; } }