Android - 无法读取文件,获得异常

时间:2014-01-31 20:51:56

标签: java android file fileinputstream

我有一个让我发疯的问题。 所以我有两种方法,一种用于阅读,另一种用于写作。 我有一个名为Converastion的类,它包含ArrayList<ChatMessage>和一些String属性。 ConverastionChatMessage都实现了Serializable,我知道我可以将此Conversation对象保存到FileSystem

但是当我尝试阅读它然后写它(更新Conversation)时,它不能很好地工作。问题在于阅读,当我知道java.io.EOFException对象以前总是被写过时,我总是得到Conversation

以下是我的两种方法:

public Conversation getConversation(String userId, boolean createByDefault){
        try {
            File f = new File(sApplicationContext.getFilesDir() + "/" + "Conversation" + "/" + userId);
            FileInputStream fis = new FileInputStream(f);
            ObjectInputStream in = new ObjectInputStream(fis);
            Conversation ret = (Conversation) in.readObject();
            in.close();
            return ret;
        } catch (Exception e) {
            e.printStackTrace();
            Conversation conv = new Conversation();
            conv.userId = userId;
            conv.usernameChat = userId + "@" + XMPPController.HOST;

            if(createByDefault)
                setConversation(conv);

            return conv;
        }
    }

    public void setConversation(Conversation conv){
        try {
            File dir = new File(sApplicationContext.getFilesDir(), "Conversation");
            if(!dir.exists()) {
                dir.mkdir();
            }           
            File newFile = new File(sApplicationContext.getFilesDir(), "Conversation" + "/" + conv.userId);
            newFile.createNewFile();
            FileOutputStream fos = new FileOutputStream(newFile);
            ObjectOutputStream out = new ObjectOutputStream(fos);
            out.writeObject(conv);
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        } 
    }

现在我在循环中使用这些方法,这会导致问题。 onListIQ多次强奸,一个来自另一个班级的听众。我甚至试图设置synchronized(this)但没有运气,这是代码:

public void onListIQ(ListChatIQ listIQ){
    // get the conversation
                        Conversation conv = getConversation(listIQ.userId, true);

                        // loop through messages
                        for(ChatIQ chat : listIQ.chatIqs){
                            // determine if message was from me or other user
                            String userId = listIQ.userId;
                            if(chat.fromMe){
                                userId = currentProfile.userId;
                            }

                            // create new message
                            ChatMessage cm = new ChatMessage();
                            cm.id = messageId;
                            cm.userId = userId;
                            cm.text = body;
                            cm.date = new Date();

                            // add message
                            conv.messages.add(cm);
                        }

                        // update the conversation with messages
                        setConversation(conv);
}

提前致谢

0 个答案:

没有答案