我对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 /文件/
它们是同一个目录吗?
答案 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();
}