0

我的目标是创建一个应用程序,允许我从一组 url 下载多个图像并允许用户滑动它们。

我有点不确定如何做到这一点,因为我不确定如何将图像保存在 kindle 上(它没有 sd 卡)。

关于如何在本地保存网络图像(尽快访问)的任何帮助都会很棒!

4

1 回答 1

0

您可以在数组的循环中使用此方法。不要担心外部目录。没有 sd 卡插槽的设备,有一个与内部存储器分开的地方,就像一个“外部存储器”。

public Bitmap downloadImage(String url)
{
    final DefaultHttpClient client = new DefaultHttpClient();
    final HttpGet getRequest = new HttpGet(url);

    try
    {
        HttpResponse response = client.execute(getRequest);
        final int statusCode = response.getStatusLine().getStatusCode();
        if (statusCode != HttpStatus.SC_OK)
        {
            return null;
        }

        final HttpEntity entity = response.getEntity();
        if (entity != null)
        {
            InputStream inputStream = null;
            try
            {
                inputStream = entity.getContent();
                final Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
                saveImageToExternalMemory(bitmap, url); //edit the name if need
                return bitmap;
            }
            finally
            {
                if (inputStream != null)
                {
                    inputStream.close();
                }
                entity.consumeContent();
            }
        }
    }
    catch(IOException e)
    {
        getRequest.abort();
    }
    catch (Exception e)
    {
        getRequest.abort();
    }
    finally
    {
        if (client != null)
        {
            client.getConnectionManager().shutdown();
        }
    }
    return null;
}

这将使用 url 的名称保存图像,您可以根据需要进行编辑。并将图像保存到外部存储器(设备是否有 SD 卡都没有关系)。例如,我有一个 Nexus 7,它可以工作。

public void saveImageToExternalMemory(Bitmap bitmap, String name) throws IOException
{
    File dir = new File(Environment.getExternalStorageDirectory().toString()+"/yourdirectoryname");
    if (!dir.exists()) 
        dir.mkdirs();
    File file = new File(dir, name+ ".jpg"); //or the type you need
    file.createNewFile();
    OutputStream outStream = new FileOutputStream(file);
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outStream);
    outStream.flush();
    outStream.close();
}

这种方法需要

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

在清单中,下载需要:

<uses-permission android:name="android.permission.INTERNET"/>
于 2013-01-08T10:25:13.203 回答