Написал метод WriteBookList для записи ArrayList в файл внутренней памяти (в конце кода). При вызове требует контекст, которого в классе нет, это не активити...
Если делаю метод паблик и вызываю из активити, с контекстом все ОК, но требует ArrayList, которого там нет, его надо передавать коллбэком (я с ними не разобрался как следует, сложно реализовать).
Можно ли в данном примере обойтись без контекста и как это сделать? Я бы хотел именно в этом классе сделать запись массива в файл, который читать из любой активити.
public class ParseBookCovers extends AsyncTask<Void, Void, String> {
public static String LOG_TAG = "my_log";
HttpURLConnection urlConnection = null;
BufferedReader reader = null;
String resultJson = "";
private String filename = "";
ArrayList<String> urls = new ArrayList<>();
ArrayList<Uri> urisImg = new ArrayList<>(); //массив Uri обложек книг
@Override
protected String doInBackground(Void... params) {
// получаем данные с внешнего ресурса
try {
URL url = new URL("http://*********/booklist.json");
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.connect();
InputStream inputStream = urlConnection.getInputStream();
StringBuffer buffer = new StringBuffer();
reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
buffer.append(line);
}
resultJson = buffer.toString();
} catch (Exception e) {
e.printStackTrace();
}
return resultJson;
}
@Override
protected void onPostExecute(String strJson) {
super.onPostExecute(strJson);
JSONObject dataJsonObj = null;
try {
dataJsonObj = new JSONObject(strJson);
JSONArray books = dataJsonObj.getJSONArray("books");
for (int i = 0; i < books.length(); i++) {
JSONObject book = books.getJSONObject(i);
String url_book = book.getString("coverUrl");
urls.add(url_book);// пишу урлы в ArrayList urls
// Log.d(LOG_TAG, "coverUrl: " + url_book);
}
CoverLoader(urls);
} catch (JSONException e) {
e.printStackTrace();
}
}
/**
* метод загружает файлы обложек
*/
private void CoverLoader(ArrayList<String> urls) {
for (int i = 0; i < urls.size(); i++) {
int d = i + 1;
filename = "bookcover_" + d + ".jpg";
String dir = "/" + filename;
ThinDownloadManager downloadManager = new ThinDownloadManager(5); //количество потоков загрузки
Uri downloadUri = Uri.parse(urls.get(i));
Uri destinationUri = Uri.parse(dir);
urisImg.add(destinationUri);
DownloadRequest downloadRequest = new DownloadRequest(downloadUri).setDestinationURI(destinationUri);
downloadManager.add(downloadRequest);
Log.d(LOG_TAG, urls.get(i));
}
}
private void WriteBooksList(Context c, ArrayList<String> urls) throws IOException {
FileOutputStream fos = c.openFileOutput("booklist.txt", Context.MODE_PRIVATE);
ObjectOutputStream os = new ObjectOutputStream(fos);
os.writeObject(urls);
os.close();
Log.d(LOG_TAG, "File has been written");
}
}