Android 下载多个图像-可以下载所有图像,但图像都相同
我的应用程序从JSON获取图像名称。我将该名称连接到另一个url以下载图像。我可以下载所有图像,但我下载的所有图像都是相同的。例如,我的图片名称(1,2,3,4,5,6,7),但当我下载时,我可以得到所有图片,但所有图片都是(1,1,1,1,1,1,1)Android 下载多个图像-可以下载所有图像,但图像都相同,android,json,url,download,android-asynctask,Android,Json,Url,Download,Android Asynctask,我的应用程序从JSON获取图像名称。我将该名称连接到另一个url以下载图像。我可以下载所有图像,但我下载的所有图像都是相同的。例如,我的图片名称(1,2,3,4,5,6,7),但当我下载时,我可以得到所有图片,但所有图片都是(1,1,1,1,1,1,1) DownloadImageTask我有日志字符串name和reviewImageLink。结果很好。它显示不同的名称和url。但是 DownloadFullImageTaskononPostExcecute我也有日志字符串name,但它显示相同
DownloadImageTask
我有日志字符串name
和reviewImageLink
。结果很好。它显示不同的名称和url。但是
DownloadFullImageTask
ononPostExcecute
我也有日志字符串name
,但它显示相同的名称(1,1,1,1,1,1,1)
我怎样才能下载我所有的图片,而不一样
JSON
AsyncTask下载图像和json
public class DownloadImageTask extends AsyncTask<String, Void, Void> {
@Override
protected Void doInBackground(String... params) {
placeList = new ArrayList<HashMap<String, String>>();
JSONParser jParser = new JSONParser();
JSONObject jsonO = jParser.getJSONUrl(url);
// for " piture " Object in json
pictures = jsonO.getJSONArray("pictures");
for (int i = 0; i < pictures.length(); i++) {
JSONObject jObj = pictures.getJSONObject(i);
int cafe_id = jObj.getInt(TAG_CAFE_ID);
String picture_url = jObj.getString(TAG_PICTURE_URL);
// Table Picture
Model_Insert model_Insert = new Model_Insert();
model_Insert.setCafe_Id(cafe_id);
model_Insert.setPitureUrl(picture_url);
model_Insert = dataSource.createTablePicture(model_Insert);
Log.i("pic", " Picture " + model_Insert.getPitureurl());
HashMap<String, String> map = new HashMap<String, String>();
map.put(TAG_PICTURE_URL, picture_url);
placeList.add(map);
// Execute DownloadFullImageTask
reviewImageLink = "http://xxx.xxx/xxx/place_pictures/"+picture_url;
URL reviewImageURL;
Log.i("url", reviewImageLink);
String name = reviewImageLink.substring(reviewImageLink.lastIndexOf("/") + 1);
try {
reviewImageURL = new URL(reviewImageLink);
if (!hasExternalStoragePublicPicture(name)) {
isImage = false;
new DownloadFullImageTask().execute(reviewImageURL);
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, name);
Log.v("log_tag", "Directory created");
}
} catch (MalformedURLException e) {
Log.v(TAG, e.toString());
}
}
} catch (JSONException e) {
// TODO: handle exception
}
return null;
}
protected void onPostExecute(Void unused) {
ShowAllContent(); // When Finish Show Content
}
公共类下载ImageTask扩展异步任务{
@凌驾
受保护的Void doInBackground(字符串…参数){
placeList=新的ArrayList();
JSONParser jParser=新的JSONParser();
JSONObject jsonO=jParser.getJSONUrl(url);
//用于json中的“piture”对象
pictures=jsonO.getJSONArray(“图片”);
对于(int i=0;i
}
异步任务执行url
public class DownloadFullImageTask extends AsyncTask<URL, Integer, 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 = reviewImageLink.substring(reviewImageLink.lastIndexOf("/") + 1);
if (result != null) {
hasExternalStoragePublicPicture(name);
saveToSDCard(result, name);
isImage = true;
} else {
isImage = false;
}
}
}
公共类下载FullImageTask扩展异步任务{
受保护位图doInBackground(URL…路径){
网址;
试一试{
url=路径[0];
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
int length=connection.getContentLength();
InputStream为=(InputStream)url.getContent();
字节[]图像数据=新字节[长度];
int buffersize=(int)Math.ceil(长度/(双精度)100);
int=0;
int-read;
while(下载<长度){
if(长度<缓冲区大小){
read=is.read(图像数据,下载,长度);
}否则,如果((长度-已下载)在DownloadFullImageTask
的onPostExecute
中使用公共字段:reviewImageLink
。但此字段由其他任务更改。若要解决此问题,我建议您在DownloadFullImageTask中保存路径[0]的位置放置一个内部变量从doInBackground开始,改为使用它。通过多线程加载、内存缓存或外部缓存获得更好的性能。
我建议你看看这个图书馆
它很强大!我的第一个建议是错误的,很抱歉。我相信你的错误一定是在最后一部分:saveToSDCard(结果、名称);您可以提供一些示例代码吗?这里您可以提供有关它何时更改其值的更多信息。它是在postexecute中下载FullImageTask还是以前发生过?我现在的建议是,公共变量reviewImageLink在DownloadFullImageTask
onPostEx中的这两个异步任务之外的其他地方更改ecute
Stringname
的值是(1,1,1,1,1,1,1),这都是一样的。在DownloadFullImageTask的onPostExecute中,您使用公共字段:reviewImageLink。但此字段会被其他任务更改。我建议您在DownloadFullImageTask中保存路径[0]的位置放置一个内部变量从doInBackground开始,改为使用它。尝试看看这是否解决了问题?需要考虑的另一个库:。功能非常强大,使用非常简单。如何使用它们将图像下载到SD卡中。它们只显示图像。并将其放入临时文件夹。我使用的是毕加索。确切地说,我只想下载图像。将近1000。我不想下载这些图像我想同时下载多张图片,而不是一张接一张。
public class DownloadFullImageTask extends AsyncTask<URL, Integer, 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 = reviewImageLink.substring(reviewImageLink.lastIndexOf("/") + 1);
if (result != null) {
hasExternalStoragePublicPicture(name);
saveToSDCard(result, name);
isImage = true;
} else {
isImage = false;
}
}
}