最近在学习Android大牛hrman的仿微信图片选择器,需要多个带图片的文件目录,于是用genymotion模拟器的相机拍了几张自拍照,图片都保存在/DCIM/Camera/这个路径下。于是自己就在/DCIM/路径下手动创建了几个文件夹。本来想把Camera下面的自拍照全部复制过去,结果弄了半天也复制不过去(请原谅我太菜)。于是想能不能从网上下载一些图片放到新创建的文件夹下。
下面简单说一下思路,由于一些图片的下载可能比较耗时,所以将下载放在LoadImageAsyncTask这个异步类中去完成(继承AsyncTask),三个泛型参数:第一个启动参数URL,这个不用说;第二个返回参数Void,在写入文件 doInBackground中完成,不用返回;第三个参数Void;该类还有一个RandomAccessFile类型的成员变量,用于保存图片,在新建该类传入一个RandomAccessFile对象,在构造器中赋值。
在Button的点击事件中,在for循环中先创建一个RandomAccessFile,然后在新建LoadImageAsyncTask对象时,将这个RandomAccessFile传递进去即可,调用execute方法,传递一个URL。
public class MainActivity extends Activity
{
private Button loadImage;
private URL url;
private RandomAccessFile raf;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
loadImage = (Button) findViewById(R.id.loadImage);
try
{
url = new URL("http://192.***.1.***/montain.jpg");
Log.d("myurl" , url.toString());
} catch (MalformedURLException e)
{
e.printStackTrace();
}
loadImage.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view)
{
for (int i = 10 ; i < 40; i++) {
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
{
try
{
String sdCcardDir = Environment.getExternalStorageDirectory().getCanonicalPath();
raf = new RandomAccessFile(sdCcardDir + "/DCIM/Camera/pic" + i + ".png", "rw");
new LoadImageAsyncTask(raf).execute(url);
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
});
}
class LoadImageAsyncTask extends AsyncTask<URL , Void , Void>
{
private RandomAccessFile raf1;
public LoadImageAsyncTask(RandomAccessFile raf)
{
this.raf1 = raf;
}
@Override
protected Void doInBackground(URL... urls)
{
try
{
HttpURLConnection conn = (HttpURLConnection) urls[0].openConnection();
InputStream in = conn.getInputStream();
Log.d("inooo" , in.toString());
byte[] buff = new byte[1024];
int hasRead = 0;
while ((hasRead = in.read(buff)) > 0)
{
raf1.write(buff , 0 , hasRead);
Log.d("hasRead" , hasRead + "");
}
}
catch (IOException e)
{
e.printStackTrace();
}
return null;
}
}
}
页面布局比较简单就不在此贴出,可能这样实现有很多问题,欢迎提出批评意见,大家共同进步。