Android实现网络下载图片保存到SD卡的照片文件夹

 

     最近在学习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;

        }

    }

}


       页面布局比较简单就不在此贴出,可能这样实现有很多问题,欢迎提出批评意见,大家共同进步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值