1、访问权限的配置
<!-- 访问internet权限 --> <uses-permission android:name="android.permission.INTERNET"/> <!-- 在SDCard中创建与删除文件权限 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <!-- 往SDCard写入数据权限 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
2、MD5加密
public class MD5 {
public static String getMD5(String content) {
try {
MessageDigest digest = MessageDigest.getInstance("MD5");
digest.update(content.getBytes());
return getHashString(digest);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return null;
}
private static String getHashString(MessageDigest digest) {
StringBuilder builder = new StringBuilder();
for (byte b : digest.digest()) {
builder.append(Integer.toHexString((b >> 4) & 0xf));
builder.append(Integer.toHexString(b & 0xf));
}
return builder.toString();
}
}
3、XmlPullParser解析xml文件返回List对象
/*
* 根据提供的URL,得到HttpURLConnection的连接,设置超时时间和请求方式
* 使用XMLPullParser解析请求的输入流,循环解析xml,直到文档的结尾
* <?xml version="1.0" encoding="UTF-8"?>
<topics>
<topic id="1">
<title>西安大雁塔01</title>
<image src="http://192.168.173.1:8081/mysap/images/0101.jpg"/>
</topic>
</topics>
*/
public List<Topic> getContacts() throws Exception{
String dataURL = "http://192.168.173.1:8081/mysap/datafile/topic01.xml";
HttpURLConnection conn = (HttpURLConnection)new URL(dataURL).openConnection();
conn.setConnectTimeout(5000);
conn.setRequestMethod("GET");
if(conn.getResponseCode() == 200){
InputStream inputStream = conn.getInputStream();
String inputEncoding = "UTF-8";
XmlPullParser xmlParser = Xml.newPullParser();
xmlParser.setInput(inputStream, inputEncoding);
List<Topic> topicList = new ArrayList<Topic>();
int eventType = xmlParser.getEventType();
String tagName = null;
Topic topic = null;
while(eventType != XmlPullParser.END_DOCUMENT){
tagName = xmlParser.getName();
switch(eventType){
case XmlPullParser.START_TAG:
if("topic".equals(tagName)){
topic = new Topic();
topic.id = new Integer(xmlParser.getAttributeValue(0));
}else if("title".equals(tagName)){
topic.title = xmlParser.nextText();
}else if("image".equals(tagName)){
topic.imageSrc = xmlParser.getAttributeValue(0);
}
break;
case XmlPullParser.END_TAG:
if("topic".equals(tagName)){
topicList.add(topic);
topic = null;
}
break;
}
eventType = xmlParser.next();
}
return topicList;
}
return null;
}
4、从网络上获取文件,存储在指定的缓存目录下
/**
* 先把网络文件的fileUri进行MD5加密处理,然后生产对应的文件(后缀名不变)
* 先从缓存目录下查询是否存在该文件,如果不存在则再次获取,直接从缓存中获取
* 否则把网络文件缓存到本地
* @param fileUri
* @param cacheDir
* @return
* @throws Exception
*/
public Uri getImage(String fileUri, File cacheDir) throws Exception{
String tempPath = MD5.getMD5(fileUri) +
fileUri.substring(fileUri.lastIndexOf("."));
File localFile = new File(cacheDir, tempPath);
if(localFile.exists()){
return Uri.fromFile(localFile);
}else{
HttpURLConnection conn = (HttpURLConnection)new URL(fileUri).openConnection();
conn.setConnectTimeout(5000);
conn.setRequestMethod("GET");
if(conn.getResponseCode() == 200){
FileOutputStream outStream = new FileOutputStream(localFile);
InputStream inputStream = conn.getInputStream();
byte[] buffer = new byte[1024];
int len = 0;
while( (len = inputStream.read(buffer)) != -1){
outStream.write(buffer, 0, len);
}
inputStream.close();
outStream.close();
return Uri.fromFile(localFile);
}
}
return null;
}