0
所以我一直在四处寻找关于如何将URL图片(.png)下载到手机上的解释itself-Android的Eclipse的从URL存储在手机
我有一个方法下载图像在菜单上选择一旦他们选择照片 - 它发送的URL路径以及文件名我希望它被称为(test.png暂时)
我想要做到这一点AsynC以及保持UI免费 -
下面的代码实际上关闭罚款,但它似乎并没有保存任何图像,虽然 - (我不有我的手机上的SD卡,但我想保存到测试数据文件夹,以及与相同的结果)
protected void saveImage(String imageUrl, String fileName){
class SendPostReqAsyncTask extends AsyncTask<String, Void, String>{
private String imageUrl;
private String fileName;
public SendPostReqAsyncTask (String imageUrl, String fileName)
{
super();
this.imageUrl=imageUrl;
this.fileName=fileName;
}
@Override
protected String doInBackground(String... params) {
String newfilename="";
try {
File externalStorageDirectory = Environment.getExternalStorageDirectory();
URL urlTmp = new URL(imageUrl);
newfilename = urlTmp.getFile();
newfilename = externalStorageDirectory + "/" + fileName;
Bitmap bitmap = BitmapFactory.decodeStream(urlTmp.openStream());
FileOutputStream fileOutputStream = new FileOutputStream(newfilename);
if (bitmap != null) {
bitmap.compress(CompressFormat.PNG, 50, fileOutputStream);
return newfilename;
}
} catch (MalformedURLException e) {
Log.w("errorSaving", "Could not save image with url: " + imageUrl, e);
} catch (IOException e) {
Log.w("errorSaving", "Could not save image with url: " + imageUrl, e);
}
Log.d("errorSaving", "Failed to save image " + fileName);
return newfilename;
}
//handle result when done
protected void onPostExecute(String result) {
super.onPostExecute(result);
Toast.makeText(getApplicationContext(), "Photo saved to phone: " + result, Toast.LENGTH_LONG).show();
}
}
SendPostReqAsyncTask sendPostReqAsyncTask = new SendPostReqAsyncTask(imageUrl,fileName);
sendPostReqAsyncTask.execute();
}
标准问题:您是否有权写入外部存储?如果是,您是否有权访问互联网?如果是的话,请解释你的代码失败的地方。 – 323go
是的,我在清单中设置了权限,不幸的是我没有收到任何错误 - 代码运行,但它实际上并没有保存任何文件 – sykal
逐行浏览您的代码。无论如何,如果你只是抛出警告(Log.w),你就不会有错误。第一个newFilename分配是多余的。这是显而易见的,就像一个不正确的url或一个缺少的fileName。 – 323go