Android - downloading image from web, saving to internal memory in location private to app, displaying for list item

后端 未结 3 1370
Happy的楠姐
Happy的楠姐 2021-02-06 11:35

What I\'m trying to do is this: I want my application to download an image from the Internet and save it to the phone\'s internal memory in a location that is private to the app

相关标签:
3条回答
  • 2021-02-06 12:10
    void  writeToFile(Bitmap _bitmapScaled)
        {
            ByteArrayOutputStream bytes = new ByteArrayOutputStream();
            _bitmapScaled.compress(Bitmap.CompressFormat.PNG, 40, bytes);
            try{
            File f;
            //you can create a new file name "test.jpg" in sdcard folder.
            if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED))
                f =new File(android.os.Environment.getExternalStorageDirectory(),"FamilyLocator/userimages/"+imageName);
            else
             f = new File(Environment.getDataDirectory(),"FamilyLocator/userimages/"+imageName);
    
            f.createNewFile();
            //write the bytes in file
            FileOutputStream fo = new FileOutputStream(f);
            fo.write(bytes.toByteArray());
            // remember close de FileOutput
            fo.close();
            }catch(Exception e){e.printStackTrace();}
        }
    
    0 讨论(0)
  • 2021-02-06 12:16

    it seems that some code is left out, I re-wrote it like this:

    ProductUtils.java

    public static String productLookup(String productID, Context c) throws IOException {
    
        URL url = new URL("http://www.samplewebsite.com/" + productID + ".jpg");
    
        InputStream input = null;
        FileOutputStream output = null;
    
        try {
            String outputName = productID + "-thumbnail.jpg";
    
            input = url.openConnection().getInputStream();
            output = c.openFileOutput(outputName, Context.MODE_PRIVATE);
    
            int read;
            byte[] data = new byte[1024];
            while ((read = input.read(data)) != -1)
                output.write(data, 0, read);
    
            return outputName;
    
        } finally {
            if (output != null)
                output.close();
            if (input != null)
                input.close();
        }
    }
    
    0 讨论(0)
  • 2021-02-06 12:17

    Looks like simply referring to the image file name when trying to read it was not enough, and I had to call getFilesDir() to get the path of the file storage. Below is the code I used:

    String path = context.getFilesDir().toString();
    String fileName = cursor.getString(cursor.getColumnIndex(DbAdapter.KEY_PRODUCT_ID));
    
    if (fileName != null && !fileName.equals("")) {
        Bitmap bMap = BitmapFactory.decodeFile(path + "/" + fileName);
        if (bMap != null) {
            thumbnail.setImageBitmap(bMap);
        }
    }
    
    0 讨论(0)
提交回复
热议问题