/**
* HttpURLConnection的post请求
* @param urlPath
* @param map
* @return
*/
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 url = new URL(urlPath);
//由URL的openConnection方法得到一个HttpURLConnection(需要强转)
HttpURLConnection httpURLConnection =
(HttpURLConnection) url.openConnection();
//设置post提交
httpURLConnection.setRequestMethod("POST");
//设置超时时间
httpURLConnection.setConnectTimeout(30000);
httpURLConnection.setReadTimeout(30000);
httpURLConnection.setDoInput(true);
httpURLConnection.setDoOutput(true);
//把请求正文通过OutputStream发出去
OutputStream os =httpURLConnection.getOutputStream();
os.write(request.getBytes());
os.flush();
//判断响应码 200 代表成功
if(httpURLConnection.getResponseCode()==200){
//由HttpURLConnection拿到输入流
InputStream in=httpURLConnection.getInputStream();
StringBuffer sb=new StringBuffer();
//根据输入流做一些IO操作
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 url = new URL(urlPath);
//由URL的openConnection方法得到一个HttpURLConnection(需要强转)
HttpURLConnection httpURLConnection =
(HttpURLConnection) url.openConnection();
//设置连接
httpURLConnection.connect();
//判断响应码 200 代表成功
if(httpURLConnection.getResponseCode()==200){
//由HttpURLConnection拿到输入流
InputStream in=httpURLConnection.getInputStream();
StringBuffer sb=new StringBuffer();
File file =new File(context.getExternalCacheDir(),getMD5(urlPath));
FileOutputStream fos=new FileOutputStream(file);
//根据输入流做一些IO操作
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 {
// 生成一个MD5加密计算摘要
MessageDigest md = MessageDigest.getInstance("MD5");
// 计算md5函数
md.update(str.getBytes());
// digest()最后确定返回md5 hash值,返回值为8为字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符
// BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值
return new BigInteger(1, md.digest()).toString(16);
} catch (Exception e) {
return str;
}
}
}
==================================================
package com.wz.xlistdemo;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
import android.widget.Toast;
import com.google.gson.Gson;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import me.maxwin.view.XListView;
public class MainActivity extends AppCompatActivity implements XListView.IXListViewListener{
private XListView lv;
private TextView tv;
private List<Data.DataBean> list = new ArrayList<>();
private MyAdapter adapter;
private int startNum = 0;
private String urlPath = "http://www.93.gov.cn/93app/data.do?channelId=0&startNum=";
private Handler mHandler=new Handler(){
@Override
public void handleMessage(Message msg) {
Gson gson=new Gson();
Data data=gson.fromJson(msg.obj.toString(),Data.class);
list.addAll(data.getData());
adapter.notifyDataSetChanged();
updateCache();
stopXList();
}
};
private void stopXList() {
lv.stopRefresh();
lv.stopLoadMore();
lv.setRefreshTime("刚刚");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
loadData();
}
private void loadData() {
File file =new File(getExternalCacheDir(),UrlUtils.getMD5(urlPath+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=1;
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 = UrlUtils.getUrlConnect(MainActivity.this,urlPath+startNum);
Message msg=Message.obtain();
msg.what=1;
msg.obj=result;
mHandler.sendMessage(msg);
}
}.start();
}
}
private void updateCache() {
File file=getExternalCacheDir();
long size = 0;
if(file.isDirectory()){
File [] files = file.listFiles();
for(File f:files){
size+=f.length();
}
}
Double d=size/1024.0;
tv.setText(new java.text.DecimalFormat("#.00").format(d)+"KB");
}
private void initView() {
lv= (XListView) findViewById(R.id.lv);
tv= (TextView) findViewById(R.id.tv);
adapter =new MyAdapter(this,list,R.layout.item);
lv.setAdapter(adapter);
lv.setPullLoadEnable(true);
lv.setXListViewListener(this);
}
@Override
public void onRefresh() {
startNum=0;
list.clear();
loadData();
}
@Override
public void onLoadMore() {
startNum=list.size();
loadData();
}
}