// Path: app/src/main/java/com/troy/xifan/App.java
// public class App extends Application {
//     public static final String TAG = "Xifan";
//     private static App sInstance;
// 
//     private UserRes user;
// 
//     private List<Activity> mActivityList = new ArrayList<>();
// 
//     public App() {
//         sInstance = this;
//     }
// 
//     @Override
//     public void onCreate() {
//         super.onCreate();
//         registerActivityLifecycleCallbacks(mActivityLifecycleCallbacks);
//         init();
//     }
// 
//     private void init() {
//         Router.initialize(this);
// 
//         Stetho.initializeWithDefaults(this);
//         Logger.init(TAG)                 // default PRETTYLOGGER or use just init()
//                 .methodCount(1)                 // default 2
//                 .hideThreadInfo()               // default shown
//                 .logLevel(LogLevel.FULL)        // default LogLevel.FULL
//                 .methodOffset(2);            // default 0
// 
//         FIR.init(this);
//         // 初始化参数依次为 this, AppId, AppKey
//         AVOSCloud.initialize(this, Constants.AVOSCloud.APP_ID, Constants.AVOSCloud.APP_KEY);
//         AVAnalytics.enableCrashReport(this, true);
//     }
// 
//     public static App getInstance() {
//         return sInstance;
//     }
// 
//     public UserRes getUser() {
//         return user;
//     }
// 
//     public void setUser(UserRes user) {
//         this.user = user;
//     }
// 
//     private ActivityLifecycleCallbacks mActivityLifecycleCallbacks =
//             new ActivityLifecycleCallbacks() {
//                 @Override
//                 public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
//                     if (!mActivityList.contains(activity)) {
//                         mActivityList.add(activity);
//                     }
//                 }
// 
//                 @Override
//                 public void onActivityStarted(Activity activity) {
// 
//                 }
// 
//                 @Override
//                 public void onActivityResumed(Activity activity) {
// 
//                 }
// 
//                 @Override
//                 public void onActivityPaused(Activity activity) {
// 
//                 }
// 
//                 @Override
//                 public void onActivityStopped(Activity activity) {
// 
//                 }
// 
//                 @Override
//                 public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
// 
//                 }
// 
//                 @Override
//                 public void onActivityDestroyed(Activity activity) {
//                     if (mActivityList.contains(activity)) {
//                         mActivityList.remove(activity);
//                     }
//                 }
//             };
// 
//     public List<Activity> getActivityList() {
//         return mActivityList;
//     }
// 
//     public void setActivityList(List<Activity> activityList) {
//         mActivityList = activityList;
//     }
// 
//     public void cleanActivityList() {
//         for (Activity activity : mActivityList) {
//             activity.finish();
//         }
//     }
// }


import android.os.Environment;
import com.orhanobut.logger.Logger;
import com.troy.xifan.App;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

    public synchronized static Object readObjectFromFile(File file) {
        ObjectInputStream input = null;
        Object object = null;
        try {
            input = new ObjectInputStream(new FileInputStream(file));
            object = input.readObject();
        } catch (IOException e) {
            e.printStackTrace();
            Logger.e("read object from file fail\n" + e);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            Logger.e("read object from file fail\n" + e);
        } finally {
            try {
                if (input != null) {
                    input.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return object;
    }

    public static boolean deleteFile(File file) {
        return file.delete();
    }

    public static File getCacheFile(String fileName) {
// Path: app/src/main/java/com/troy/xifan/App.java
// public class App extends Application {
//     public static final String TAG = "Xifan";
//     private static App sInstance;
// 
//     private UserRes user;
// 
//     private List<Activity> mActivityList = new ArrayList<>();
// 
//     public App() {
//         sInstance = this;
//     }
// 
//     @Override
//     public void onCreate() {
//         super.onCreate();
//         registerActivityLifecycleCallbacks(mActivityLifecycleCallbacks);
//         init();
//     }
// 
//     private void init() {
//         Router.initialize(this);
// 
//         Stetho.initializeWithDefaults(this);
//         Logger.init(TAG)                 // default PRETTYLOGGER or use just init()
//                 .methodCount(1)                 // default 2
//                 .hideThreadInfo()               // default shown
//                 .logLevel(LogLevel.FULL)        // default LogLevel.FULL
//                 .methodOffset(2);            // default 0
// 
//         FIR.init(this);
//         // 初始化参数依次为 this, AppId, AppKey
//         AVOSCloud.initialize(this, Constants.AVOSCloud.APP_ID, Constants.AVOSCloud.APP_KEY);
//         AVAnalytics.enableCrashReport(this, true);
//     }
// 
//     public static App getInstance() {
//         return sInstance;
//     }
// 
//     public UserRes getUser() {
//         return user;
//     }
// 
//     public void setUser(UserRes user) {
//         this.user = user;
//     }
// 
//     private ActivityLifecycleCallbacks mActivityLifecycleCallbacks =
//             new ActivityLifecycleCallbacks() {
//                 @Override
//                 public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
//                     if (!mActivityList.contains(activity)) {
//                         mActivityList.add(activity);
//                     }
//                 }
// 
//                 @Override
//                 public void onActivityStarted(Activity activity) {
// 
//                 }
// 
//                 @Override
//                 public void onActivityResumed(Activity activity) {
// 
//                 }
// 
//                 @Override
//                 public void onActivityPaused(Activity activity) {
// 
//                 }
// 
//                 @Override
//                 public void onActivityStopped(Activity activity) {
// 
//                 }
// 
//                 @Override
//                 public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
// 
//                 }
// 
//                 @Override
//                 public void onActivityDestroyed(Activity activity) {
//                     if (mActivityList.contains(activity)) {
//                         mActivityList.remove(activity);
//                     }
//                 }
//             };
// 
//     public List<Activity> getActivityList() {
//         return mActivityList;
//     }
// 
//     public void setActivityList(List<Activity> activityList) {
//         mActivityList = activityList;
//     }
// 
//     public void cleanActivityList() {
//         for (Activity activity : mActivityList) {
//             activity.finish();
//         }
//     }
// }


// Path: app/src/main/java/com/troy/xifan/util/FileUtils.java
import android.os.Environment;
import com.orhanobut.logger.Logger;
import com.troy.xifan.App;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;


    public synchronized static Object readObjectFromFile(File file) {
        ObjectInputStream input = null;
        Object object = null;
        try {
            input = new ObjectInputStream(new FileInputStream(file));
            object = input.readObject();
        } catch (IOException e) {
            e.printStackTrace();
            Logger.e("read object from file fail\n" + e);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            Logger.e("read object from file fail\n" + e);
        } finally {
            try {
                if (input != null) {
                    input.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return object;
    }

    public static boolean deleteFile(File file) {
        return file.delete();
    }

    public static File getCacheFile(String fileName) {
        File dir = App.getInstance().getCacheDir();