1.图片分为缩略图和大图,缩略图在获取笑话时从web服务器端同步下载,保存在data路径下;当点击缩略图时,用WebView展示网络图片。
2.PHP端的Web服务器获取图片列表的接口,返回值可以是一个json串,里面是{图片名:图片二进制串};由于二进制串在保存为JSON时会出错,可以考虑用BASE64编码后再进行json_encode。
3.JAVA端从Web服务器端获取到图片列表,先进行Base64解码,得到的byte[],直接以byte的形式写入,而不要转成string写入;转为string会破坏图片
如下是写入代码,我把它放在一个单独的FileUtil文件中,包括文件的读写操作。
public void saveImg(Context ctx,String imgname,byte[] imgcontent){
FileOutputStream out = null;
DataOutputStream writer = null;
try{
out = ctx.openFileOutput(imgname,Context.MODE_PRIVATE);
writer = new DataOutputStream(out);
writer.write(imgcontent);
writer.flush();
}catch(Exception ex){
ex.printStackTrace();
}finally{
if(writer != null){
try {
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(out != null){
try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
4.客户端不用考虑图片是否下载成功,只需要在展示每一条笑话时,同时判断是否有图片&&图片文件是否存在,再此条件下为真时,方将ImageView显示出来,并展示对应图片。
5.Adapter记录positon时不要用全局变量,因为那样会不准(永远是1);用一个final型的变量专门存储postion,再传入相应的事件方法即可。