Привет, я использую функцию, которая выглядит следующим образом.Он преобразует строку в URL
protected URL stringToURL(String urlString) {
try {
URL url = new URL(urlString);
return url;
} catch (MalformedURLException e) {
e.printStackTrace();
}
return null;
}
и пример использования этого:
final URL url1 = stringToURL("www.link_to_my_page/sample_image1.jpg");
, и если я захочу использовать больше, я просто буду использовать его следующим образом.
final URL url1 = stringToURL("www.link_to_my_page/sample_image1.jpg");
final URL url2 = stringToURL("www.link_to_my_page/sample_image2.jpg");
final URL url3 = stringToURL("www.link_to_my_page/sample_image3.jpg");
final URL url4 = stringToURL("www.link_to_my_page/sample_image4.jpg");
final URL url5 = stringToURL("www.link_to_my_page/sample_image5.jpg");
final URL url6 = stringToURL("www.link_to_my_page/sample_image6.jpg");
final URL url7 = stringToURL("www.link_to_my_page/sample_image7.jpg");
final URL url8 = stringToURL("www.link_to_my_page/sample_image8.jpg");
final URL url9 = stringToURL("www.link_to_my_page/sample_image9.jpg");
, а затем у меня есть AsyncTask
, который будет обрабатывать все это, и вот он
private class DownloadTask extends AsyncTask<URL, Integer, ArrayList<image_class>> {
protected void onPreExecute() {
}
protected ArrayList<image_class> doInBackground(URL... urls) {
}
protected void onProgressUpdate(Integer... progress) {
}
protected void onCancelled() {
}
protected void onPostExecute(ArrayList<image_class> result) {
}
}
, и если я хочу запустить свой AsyncTask
, я назову его так
mMyTask = new DownloadTask().execute(url1);
или для нескольких
mMyTask = new DownloadTask().execute(url1,url2,url3,url4,url5,url6,url7,url8,url9);
и теперь вот мое беспокойство.все мои ссылки внутри моей SQLite
базы данных и то, что я до сих пор делал, - это создаю Cursor
Loop их, используя stringToURL
внутри массива, затем называю это вот так mMyTask = new DownloadTask().execute(Array_of_Urls.ToString());
, но не повезло, и это дало ошибки.
Мой вопрос: как можно вызвать эту задачу, используя мои URL в базе данных?
Вот мой текущий код
для метода создания
load_sync = findViewById(R.id.load_sync);
mProgressAnimation = new ProgressBarAnimation(load_sync, 100);
startMyAsyncTaskWithURList();
и здесьвесь код
private ArrayList<URL> getMyURLFromDB() {
ArrayList<URL> listURL = new ArrayList<>();
Cursor cursor = Sync.get_image(current_email);
while (cursor.moveToNext()) {
String folder = cursor.getString(cursor.getColumnIndex("folder"));
String urlString = cursor.getString(cursor.getColumnIndex("myimage"));
String gen_link = "Custom URL" + folder + "/" + urlString;
Log.e("Link ", "" + gen_link);
URL url = null;
try {
url = new URL(gen_link);
} catch (MalformedURLException e) {
e.printStackTrace();
}
listURL.add(url);
}
return listURL;
}
private class DownloadTask extends AsyncTask<String, Integer, ArrayList<image_class>> {
protected void onPreExecute() {
}
ArrayList<URL> listURL = null;
public DownloadTask(ArrayList<URL> urls){
this.listURL = urls;
}
protected ArrayList<image_class> doInBackground(String... params) {
int count = listURL.size();
HttpURLConnection connection = null;
ArrayList<image_class> bitmaps = new ArrayList<>();
for (int i = 0; i < count; i++) {
URL currentURL = listURL.get(i);
String fileName = currentURL.toString().substring(currentURL.toString().lastIndexOf('/') + 1);
try {
connection = (HttpURLConnection) currentURL.openConnection();
connection.connect();
InputStream inputStream = connection.getInputStream();
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
Bitmap bmp = BitmapFactory.decodeStream(bufferedInputStream);
bitmaps.add(new image_class(bmp,fileName));
publishProgress((int) (((i + 1) / (float) count) * 100));
if (isCancelled()) {
break;
}
} catch (IOException e) {
e.printStackTrace();
} finally {
connection.disconnect();
}
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return bitmaps;
}
protected void onProgressUpdate(Integer... progress) {
mProgressAnimation.setProgress(progress[0]);
}
protected void onPostExecute(ArrayList<image_class> result) {
Iterator itr = result.iterator();
while(itr.hasNext()){
image_class st = (image_class) itr.next();
Bitmap bitmap = st.image;
saveImageToInternalStorage(bitmap, st.filename);
}
}
}
protected Uri saveImageToInternalStorage(Bitmap bitmap, String filename) {
File file = sdCardDirectory;
file = new File(file, filename);
try {
OutputStream stream = null;
stream = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
stream.flush();
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
Uri savedImageURI = Uri.parse(file.getAbsolutePath());
return savedImageURI;
}
изображение не загружается или AsyncTask не работает