Кеширование ифонрмации
Добавлено: 14 май 2015, 20:46
Я качаю из интернета картинки через лоадер в потоках. Но при смене ориентации екрана картинки пропадают. Вот код
Подскажите форумчане как зделать так чтоб картинки сохранялись?
Код: Выделить всё
package com.example.loader;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Pair;
import android.view.View;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TableRow;
import android.widget.Toast;
public class MainActivity extends Activity {
//Ссылки на изображения для загрузки
public static final String[] imagesUrls = {
"http://bomba.vn.ua/sites/default/files/styles/200x200/public/_dsc0072.jpg?itok=ORAFJotr",
"http://bomba.vn.ua/sites/default/files/styles/200x200/public/_dsc0104.jpg?itok=Peitxl1w",
"http://bomba.vn.ua/sites/default/files/styles/200x200/public/_dsc0119.jpg?itok=W54uY3Lk"
};
private ArrayList imageViews = new ArrayList();
private ProgressBar progressBar;
private AsyncImagesLoader loader;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setUpViews();
}
public void startLoading(View view) {
if (loader == null ||
loader.getStatus().equals(AsyncTask.Status.FINISHED)) {
loader = new AsyncImagesLoader();
loader.execute(imagesUrls);
progressBar.setProgress(0);
} else {
Toast.makeText(MainActivity.this, "Ждите завершения загрузки", Toast.LENGTH_SHORT)
.show();
}
}
private void setUpViews() {
TableRow imagesRow = (TableRow)findViewById(R.id.images);
for (int i = 0; i < imagesRow.getChildCount(); i++) {
imageViews.add((ImageView) imagesRow.getChildAt(i));
}
progressBar = (ProgressBar)findViewById(R.id.loading_progress);
}
//AsyncTask параметризуется:
//входной параметр - строки, представляют url
//параметр прогресса - пара вида: позиция виджета+изоборажение для него
//параметр результат - Void, он нам не нужен
private class AsyncImagesLoader extends AsyncTask <String, Pair<Integer, Bitmap>, Void> {
protected Void doInBackground(String... urls) {
for (int i = 0; i < urls.length; i++) {
try {
Bitmap image = getImageByUrl(urls[i]);
//Добавим засыпание потока, чтобы симиритовать долгую загрузку
Thread.sleep(400);
Pair pair = new Pair(i, image);
publishProgress(pair);
} catch (IOException e) {
Toast.makeText(MainActivity.this,
"Не возможно загрузить изображение",
Toast.LENGTH_SHORT).show();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return null;
}
protected void onProgressUpdate(Pair ... progress) {
int position = (int) progress[0].first;
int currentProgress = position+1;
Bitmap image = (Bitmap) progress[0].second;
progressBar.setProgress(currentProgress);
((ImageView) imageViews.get(position)).setImageBitmap(image);
}
protected void onPostExecute(Void result) {
Toast.makeText(MainActivity.this, "Загрузка завершена", Toast.LENGTH_SHORT)
.show();
}
private Bitmap getImageByUrl(String url) throws IOException,
MalformedURLException {
//Вот так можно получить изображение по url
Bitmap image = BitmapFactory.decodeStream((InputStream)new URL(url).getContent());
return image;
}
}
}