Android:将.png从URL保存到应用内部存储空间

时间:2017-07-24 07:40:47

标签: java android unity3d

我对android很新,我试图修改Android应用,以便从URL下载个人资料图片(最好是PNG),并将其保存在{{1} }。应该注意的是,该应用程序最初是在Unity中创建的,只是构建和导出。

这是我的初始代码:

com.companyName.AppName.whatever/files

编辑:这是我的其他代码,正如@Ashutosh Sagar所建议的

URL url = null;
try {
    url = new URL(playerDO.getProfileURL());
} catch (MalformedURLException e) {
    e.printStackTrace();
}

InputStream input = null;
try {
    input = url.openStream();
} catch (IOException e) {
    e.printStackTrace();
}

String fileName = playerDO.getId() + ".png";
FileOutputStream outputStream = null;
try {
    outputStream = openFileOutput(fileName, Context.MODE_PRIVATE);

    byte[] buffer = new byte[256];
    int bytesRead = 0;
    while ((bytesRead = input.read(buffer, 0, buffer.length)) >= 0) {
        outputStream.write(buffer, 0, bytesRead);
    }    
} catch (Exception e) {
    e.printStackTrace();
} finally {
    try {
        outputStream.close();
        input.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

(它也不会写)。

不幸的是,我对此有几个问题。我的主要问题是,当它(在它的情况下)运行时,它实际上并没有保存任何东西。我将去检查InputStream input = null; Bitmap image = null; try { input = url.openStream(); image = BitmapFactory.decodeStream(input); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } String fileName = playerDO.getId() + ".png"; FileOutputStream outputStream = null; File myDir = getFilesDir(); try { Log.wtf("DIRECTORY", myDir.toString()); File imageFile = new File(myDir, fileName); if (!imageFile.exists()){ imageFile.createNewFile(); Log.wtf("ANDROID NATIVE MSG: WARN!", "File does not exist. Writing to: " + imageFile.toString()); } outputStream = new FileOutputStream(imageFile, false); image.compress(Bitmap.CompressFormat.PNG, 90, outputStream); } catch (Exception e) { e.printStackTrace(); } finally { try { outputStream.close(); input.close(); } catch (IOException e) { e.printStackTrace(); Log.wtf("AWWW CRAP", e.toString()); } } 目录,但没有找到这样的com.companyName.AppName.whatever/files文件。我还需要它来覆盖任何同名的现有文件,当它不起作用时很难检查。

我的第二个问题是它没有考虑到互联网连接的延迟。虽然我已经设置了足够的try-catch子句来阻止它崩溃(就像以前一样),但最终的结果是它也没有保存。

我该如何改进?我失踪了什么?

编辑:

打印出目录显示它应该在:

  

/data/user/0/com.appName/files/5965e9e4a0f0463853016e2b.png

但是,使用ES File explorer,唯一远程接近的是

  

模拟/ 0 / Android设备/数据/ com.appName /文件/

它们是同一个目录吗?

2 个答案:

答案 0 :(得分:0)

首先尝试从网址获取位图图片

 Bitmap mIcon11 = null;
try {
    InputStream in = new java.net.URL(url).openStream();
    mIcon11 = BitmapFactory.decodeStream(in);
} catch (Exception e) {
    Log.d("Error", e.getStackTrace().toString());

}

并保存位图图片,请查看 GoCrazy

答案 1 :(得分:0)

试试这个

void getImage(String string_url)
{
    //Generate Bitmap from URL
    URL url_value = new URL(string_url);
    Bitmap image =
    BitmapFactory.decodeStream(url_value.openConnection().getInputStream());

    //Export File to local Directory
    OutputStream stream = new FileOutputStream("path/file_name.png");
    /* Write bitmap to file using JPEG or PNG and 80% quality hint for JPEG. */
    bitmap.compress(CompressFormat.PNG, 80, stream);
    stream.close();
}