package com.roboo.like.google.async;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OptionalDataException;
import java.io.StreamCorruptedException;
import java.util.LinkedList;
import android.content.Context;
import com.roboo.like.google.GoogleApplication;
import com.roboo.like.google.news.utils.NewsContentUtils;
import com.roboo.like.google.utils.FileUtils;
import com.roboo.like.google.utils.MD5Utils;
import com.roboo.like.google.utils.NetWorkUtils;
public class NewsContentAsyncTaskLoader extends BaseAsyncTaskLoader<LinkedList<String>>
{
private String mNewsUrl;
private Context mContext;
private LinkedList<String> mData;
public NewsContentAsyncTaskLoader(Context context, String newsUrl)
{
super(context);
mContext = context;
mNewsUrl = newsUrl;
System.out.println(" mNewsUrl = " + mNewsUrl);
}
@Override
public void deliverResult(LinkedList<String> data)
{
// System.out.println("deliverResult ");
super.deliverResult(mData);
}
@SuppressWarnings("unchecked")
public LinkedList<String> loadInBackground()
{
// System.out.println("loadInBackground " );
LinkedList<String> data = null;
if (null == mData)
{
try
{
File file = new File(FileUtils.getFileCacheDir(mContext,
FileUtils.TYPE_NEWS_CONTENT), MD5Utils.generate(mNewsUrl));
if (!NetWorkUtils.isNetworkAvailable(mContext) && file.exists())
{
data = getOfflineData(file);
}
else
{
data = NewsContentUtils.getNewsDataList(mNewsUrl);
saveNewsContentData(data);
}
mEndTime = System.currentTimeMillis();
if (mEndTime - mStartTime < THREAD_LEAST_DURATION_TIME)
{
Thread.sleep(THREAD_LEAST_DURATION_TIME);
}
}
catch (IOException e)
{
e.printStackTrace();
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
mData = data;
}
return data;
}
private LinkedList<String> getOfflineData(File file) throws StreamCorruptedException,
IOException, FileNotFoundException, OptionalDataException, ClassNotFoundException
{
LinkedList<String> data;
ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(file));
data = (LinkedList<String>) objectInputStream.readObject();
objectInputStream.close();
GoogleApplication.TEST = true;
if (GoogleApplication.TEST)
{
System.out.println("从本地文件读取对象成功");
}
return data;
}
private void saveNewsContentData(LinkedList<String> data)
{
File dirFile = FileUtils.getFileCacheDir(mContext, FileUtils.TYPE_NEWS_CONTENT);
File dataFile = new File(dirFile, MD5Utils.generate(mNewsUrl));
try
{
ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(
dataFile));
objectOutputStream.writeObject(data);
objectOutputStream.close();
GoogleApplication.TEST = true;
if (GoogleApplication.TEST)
{
System.out.println("新闻内容对象写入文件成功 :: 文件路径 = " + dataFile.getAbsolutePath());
}
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}