android将图像两次保存到SD卡
|
我有一个代码,可以从网站下载图像并将其保存在SD卡上。
当我出于某种原因发送2个网址时,它只会下载第一个图像两次并用第二个图像名称保存它们,因此,如果网站上有image1和image2,则代码只会下载两次image1并将其保存在SD上-image2卡可以让别人告诉我我做错了什么吗?
public String getLocalLink(String image_URL, String imageName){
/** This is what we do with this method:
* Go online, according to the link, get the content, call the method to save.
*/
ImageLink = image_URL;
URL ImageLinkURL;
try {
ImageLinkURL = new URL(ImageLink);
//URL url = new URL(strURL);
if (!hasExternalStoragePublicPicture(imageName)) {
isImage = false;
new DownloadImageTask().execute(ImageLinkURL);
Log.v(\"log_tag\", \"if\");
isImage = true;
File sdImageMainDirectory = new File(Environment
.getExternalStorageDirectory(), getResources()
.getString(R.string.directory));
sdImageMainDirectory.mkdirs();
File file = new File(sdImageMainDirectory, imageName);
Log.v(\"log_tag\", \"Directory created\");
}
} catch (MalformedURLException e) {
Log.v(TAG, e.toString());
}
return (\"/sdcard/Hanud/”+imageName+\".jpg\");
}
private class DownloadImageTask extends AsyncTask<URL, Integer, Bitmap> {
// This class definition states that DownloadImageTask will take String
// parameters, publish Integer progress updates, and return a Bitmap
protected Bitmap doInBackground(URL... paths) {
URL url;
try {
url = paths[0];
HttpURLConnection connection = (HttpURLConnection) url
.openConnection();
int length = connection.getContentLength();
InputStream is = (InputStream) url.getContent();
byte[] imageData = new byte[length];
int buffersize = (int) Math.ceil(length / (double) 100);
int downloaded = 0;
int read;
while (downloaded < length) {
if (length < buffersize) {
read = is.read(imageData, downloaded, length);
} else if ((length - downloaded) <= buffersize) {
read = is.read(imageData, downloaded, length
- downloaded);
} else {
read = is.read(imageData, downloaded, buffersize);
}
downloaded += read;
publishProgress((downloaded * 100) / length);
}
Bitmap bitmap = BitmapFactory.decodeByteArray(imageData, 0,
length);
if (bitmap != null) {
Log.i(TAG, \"Bitmap created\");
} else {
Log.i(TAG, \"Bitmap not created\");
}
is.close();
return bitmap;
} catch (MalformedURLException e) {
Log.e(TAG, \"Malformed exception: \" + e.toString());
} catch (IOException e) {
Log.e(TAG, \"IOException: \" + e.toString());
} catch (Exception e) {
Log.e(TAG, \"Exception: \" + e.toString());
}
return null;
}
protected void onPostExecute(Bitmap result) {
String name = ImageLink.substring(ImageLink
.lastIndexOf(\"/\") + 1);
if (result != null) {
hasExternalStoragePublicPicture(name);
saveToSDCard(result, name);
isImage = true;
} else {
isImage = false;
}
}
}
public void saveToSDCard(Bitmap bitmap, String name) {
boolean mExternalStorageAvailable = false;
boolean mExternalStorageWriteable = false;
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
mExternalStorageAvailable = mExternalStorageWriteable = true;
Log.v(TAG, \"SD Card is available for read and write \"
+ mExternalStorageAvailable + mExternalStorageWriteable);
saveFile(bitmap, name);
} else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
mExternalStorageAvailable = true;
mExternalStorageWriteable = false;
Log.v(TAG, \"SD Card is available for read \"
+ mExternalStorageAvailable);
} else {
mExternalStorageAvailable = mExternalStorageWriteable = false;
Log.v(TAG, \"Please insert a SD Card to save your image \"
+ mExternalStorageAvailable + mExternalStorageWriteable);
}
}
private void saveFile(Bitmap bitmap, String name) {
String filename = name;
ContentValues values = new ContentValues();
File sdImageMainDirectory = new File(Environment
.getExternalStorageDirectory(), getResources().getString(
R.string.directory));
sdImageMainDirectory.mkdirs();
File outputFile = new File(sdImageMainDirectory, filename);
values.put(MediaStore.MediaColumns.DATA, outputFile.toString());
values.put(MediaStore.MediaColumns.TITLE, filename);
values.put(MediaStore.MediaColumns.DATE_ADDED, System
.currentTimeMillis());
values.put(MediaStore.MediaColumns.MIME_TYPE, \"image/png\");
Uri uri = this.getContentResolver().insert(
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
values);
try {
OutputStream outStream = this.getContentResolver()
.openOutputStream(uri);
bitmap.compress(Bitmap.CompressFormat.PNG, 95, outStream);
outStream.flush();
outStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private boolean hasExternalStoragePublicPicture(String name) {
File sdImageMainDirectory = new File(Environment
.getExternalStorageDirectory(), getResources().getString(
R.string.directory));
File file = new File(sdImageMainDirectory, name);
if (file != null) {
file.delete();
}
return file.exists();
}
没有找到相关结果
已邀请:
1 个回复
催备南菠亨