Android microSD加载延迟导致第一次加载时为空值

Android microSD加载延迟导致第一次加载时为空值,android,file-io,Android,File Io,我将各种用户帐户存储在一个自定义对象数组列表中,该列表保存在microSD卡上的一个文件中,并使用以下方法加载此文件: public static ArrayList<User> loadAllUsers() { if (storageAvailable()) { ArrayList<User> myList = new ArrayList<User>(); try {

我将各种用户帐户存储在一个自定义对象数组列表中,该列表保存在microSD卡上的一个文件中,并使用以下方法加载此文件:

public static ArrayList<User> loadAllUsers() {
        if (storageAvailable()) {
            ArrayList<User> myList = new ArrayList<User>();
            try {
                FileInputStream myListUsersSaved = new FileInputStream(baseDir
                        + File.separator + fileName);

                ObjectInputStream myListUsers = new ObjectInputStream(
                        myListUsersSaved);

                myList = (ArrayList<User>) myListUsers.readObject();

                myListUsers.close();

            } catch (Exception exc) {
                exc.printStackTrace();
            }

            return myList;
        } else {
            return null;
        }

    }
publicstaticarraylistloadAllUsers(){
if(storageAvailable()){
ArrayList myList=新的ArrayList();
试一试{
FileInputStream myListUsersSaved=新的FileInputStream(baseDir
+File.separator+文件名);
ObjectInputStream myListUsers=新ObjectInputStream(
myListUsersSaved);
myList=(ArrayList)myListUsers.readObject();
myListUsers.close();
}捕获(异常exc){
exc.printStackTrace();
}
返回myList;
}否则{
返回null;
}
}
这通常可以正常工作,但不幸的是,在一些速度较慢的设备中,第一次加载尝试失败,可能是由于访问microSD上的数据的延迟,当我打开加载保存的各种配置文件的活动时,第一次该方法返回null,这似乎是空的,如果我第二次尝试重新加载该活动,没有问题


有什么建议可以避免这个问题吗?

这种延迟只发生在一些罕见的改装过的固件中,这些固件将所有设备内存移动到microSD。解决方案是返回到稳定固件或加载两倍于此方法。

您可能不应该将帐户详细信息存储在外部存储器上,因为这不仅像您发现的那样不可靠,但是可以被系统上几乎任何其他应用程序读取甚至修改。@克里斯特拉顿你说得对,但文件中保存的不是合理的数据,而是一些缓存的信息。@Sivlerstorm-它可能仍然是错误的位置。或者你说的是很多兆字节的信息?@ChrisStratton不是很多兆字节,但是在“User”对象中还有一些Base64图像。因此,我看不到更好的存储位置。内容类型并不决定外部位置,只有大小或需要通过意图切换到挑剔的应用程序。如果你的意思是“内部”存储最终是外部的,是的,这可能会有问题。但当您应该使用内部存储时,请将其与使用外部存储分开。