public class MainActivity extends AppCompatActivity implements XListView.IXListViewListener {
private XListView mlistView;
private int startNum=0;
private String path="http://www.93.gov.cn/93app/data.do?channelId=0&startNum=0";
private Handler mHandler=new Handler(){
@Override
public void handleMessage(Message msg) {
String url =msg.obj.toString();
Gson gson=new Gson();
Data data = gson.fromJson(url, Data.class);
mlist.addAll(data.getData());
myAdapter.notifyDataSetChanged();
StopXlist();
}
private void StopXlist() {
mlistView.stopLoadMore();
mlistView.stopRefresh();
mlistView.setRefreshTime("刚刚");
}
};
private List<Data.DataBean> mlist;
private MyAdapter myAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mlistView = (XListView) findViewById(R.id.listview);
mlist = new ArrayList<>();
myAdapter = new MyAdapter(MainActivity.this,mlist);
mlistView.setAdapter(myAdapter);
mlistView.setPullLoadEnable(true);
mlistView.setXListViewListener(this);
loadData();
}
private void loadData() {
File file=new File(getExternalCacheDir(),NetUtils.getMD5(path+startNum));
if(file.exists()){
Toast.makeText(MainActivity.this,"从本地获取",Toast.LENGTH_SHORT).show();
try {
BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(file)));
StringBuffer sb=new StringBuffer();
String line="";
while((line=br.readLine())!=null){
sb.append(line);
}
br.close();
Message msg= Message.obtain();
msg.what=0;
msg.obj=sb.toString();
mHandler.sendMessage(msg);
} catch (Exception e) {
e.printStackTrace();
}
}else{
Toast.makeText(MainActivity.this,"从网络获取",Toast.LENGTH_SHORT).show();
new Thread(){
@Override
public void run() {
String result =NetUtils.getUrlConnect(MainActivity.this,path+startNum);
if (result!=null){
Message msg= Message.obtain();
msg.what=0;
msg.obj=result;
mHandler.sendMessage(msg);
}
}
}.start();
}
}
@Override
public void onRefresh() {
startNum=0;
mlist.clear();
loadData();
}
@Override
public void onLoadMore() {
startNum=mlist.size();
loadData();
}
}
public class NetUtils {
public static String postUrlConnect(String urlPath, Map<String,Object> map){
StringBuffer sbRequest =new StringBuffer();
if(map!=null&&map.size()>0){
for (String key:map.keySet()){
sbRequest.append(key+"="+map.get(key)+"&");
}
}
String request = sbRequest.substring(0,sbRequest.length()-1);
try {
URL url = new URL(urlPath);
HttpURLConnection httpURLConnection =
(HttpURLConnection) url.openConnection();
httpURLConnection.setRequestMethod("POST");
httpURLConnection.setConnectTimeout(30000);
httpURLConnection.setReadTimeout(30000);
httpURLConnection.setDoInput(true);
httpURLConnection.setDoOutput(true);
OutputStream os =httpURLConnection.getOutputStream();
os.write(request.getBytes());
os.flush();
if(httpURLConnection.getResponseCode()==200){
InputStream in=httpURLConnection.getInputStream();
StringBuffer sb=new StringBuffer();
byte [] buff =new byte[1024];
int len=-1;
while((len=in.read(buff))!=-1){
sb.append(new String(buff,0,len,"utf-8"));
}
in.close();
os.close();
httpURLConnection.disconnect();
return sb.toString();
}else{
return null;
}
}catch (Exception e){
Log.e("post","code:"+e.getMessage());
return null;
}
}
/**
* HttpURLConnection的get请求
* @param urlPath
* @return
*/
public static String getUrlConnect(Context context,String urlPath){
try {
URL url = new URL(urlPath);
HttpURLConnection httpURLConnection =
(HttpURLConnection) url.openConnection();
httpURLConnection.connect();
if(httpURLConnection.getResponseCode()==200){
InputStream in=httpURLConnection.getInputStream();
StringBuffer sb=new StringBuffer();
File file=new File(context.getExternalCacheDir(),getMD5(urlPath));
FileOutputStream fos=new FileOutputStream(file);
byte [] buff =new byte[1024];
int len=-1;
while((len=in.read(buff))!=-1){
fos.write(buff,0,len);
sb.append(new String(buff,0,len,"utf-8"));
}
fos.flush();
fos.close();
in.close();
httpURLConnection.disconnect();
return sb.toString();
}else{
return null;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 对字符串md5加密
*
* @param str
* @return
*/
public static String getMD5(String str) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(str.getBytes());
return new BigInteger(1, md.digest()).toString(16);
} catch (Exception e) {
return str ;
}
}
}
public class MyAdapter extends BaseAdapter{
Context context;
List<Data.DataBean> mlist;
public MyAdapter(Context context, List<Data.DataBean> mlist) {
this.mlist=mlist;
this.context=context;
}
@Override
public int getCount() {
return mlist.size();
}
@Override
public Object getItem(int position) {
return mlist.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView==null){
convertView=View.inflate(context,R.layout.item,null);
holder =new ViewHolder();
holder.image= (ImageView) convertView.findViewById(R.id.imageView);
holder.textView01= (TextView) convertView.findViewById(R.id.text1);
holder.textView02= (TextView) convertView.findViewById(R.id.text2);
convertView.setTag(holder);
}
else {
holder= (ViewHolder) convertView.getTag();
}
Data.DataBean bean=mlist.get(position);
holder.textView01.setText(bean.getTITLE());
holder.textView02.setText(bean.getSHOWTIME());
Glide.with(context).load(bean.getIMAGEURL()).into(holder.image);
return convertView;
}
class ViewHolder{
ImageView image;
TextView textView01,textView02;
}
}