package com.athena.asm.util.task; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.ArrayList; import android.app.ProgressDialog; import android.content.Context; import android.os.AsyncTask; import com.athena.asm.data.Board; import com.athena.asm.viewmodel.HomeViewModel; public class LoadFavoriteTask extends AsyncTask<String, Integer, String> { private Context context; private ArrayList<Board> realFavList; private HomeViewModel m_viewModel; public LoadFavoriteTask(Context context, HomeViewModel viewModel) { this.context = context; this.realFavList = null; m_viewModel = viewModel; } private ProgressDialog pdialog; @Override protected void onPreExecute() { m_viewModel.m_isLoadingInProgress = true; pdialog = new ProgressDialog(context); pdialog.setMessage("加载收藏中..."); pdialog.show(); } @SuppressWarnings("unchecked") @Override protected String doInBackground(String... params) { // 1. read fav from file first try { FileInputStream fis = context.openFileInput("FavList"); ObjectInputStream ois = new ObjectInputStream(fis); realFavList = (ArrayList<Board>) ois.readObject(); fis.close(); // Log.d("LoadFavoriteTask", "succeed to load favlist from file"); } catch (Exception e) { // Log.d("LoadFavoriteTask", "fail to load favlist from file"); e.printStackTrace(); } // 2. if fail to read from file, read from web boolean isLoadFromWeb = false; if (realFavList == null || realFavList.size() == 0) { realFavList = m_viewModel.updateFavList(realFavList); // Log.d("LoadFavoriteTask", "load favlist from web"); isLoadFromWeb = true; } else { m_viewModel.setFavList(realFavList); } // 3. save to file if load from web if (isLoadFromWeb) { try { FileOutputStream fos = context.openFileOutput("FavList", Context.MODE_PRIVATE); ObjectOutputStream os = new ObjectOutputStream(fos); os.writeObject(realFavList); fos.close(); // Log.d("LoadFavoriteTask", "succeed to save favlist to file"); } catch (IOException e) { // Log.d("LoadFavoriteTask", "fail to save favlist to file"); e.printStackTrace(); } } pdialog.cancel(); return null; } @Override protected void onPostExecute(String result) { m_viewModel.notifyFavListChanged(); m_viewModel.m_isLoadingInProgress = false; } }