Java:ArrayList未正确反序列化/序列化

Java:ArrayList未正确反序列化/序列化,java,android,Java,Android,我正在做一个应用程序,你可以创建一个列表,选择一个随机的选择。在这个应用程序中,我在列表中随机选取一个条目。该应用程序将ArrayList序列化为txt文件。我正在制作一个部分,它反序列化ArrayList并用该信息打开一个新活动。问题是,它在打开该活动时关闭。我相信这和它有关,没有正确的序列化。任何帮助都会很棒,谢谢 顺便说一句,它取消赎回权的原因是反序列化的ArrayList为空 以下是第一个Java文件: package com.frostbytedev.randomgenie; imp

我正在做一个应用程序,你可以创建一个列表,选择一个随机的选择。在这个应用程序中,我在列表中随机选取一个条目。该应用程序将ArrayList序列化为txt文件。我正在制作一个部分,它反序列化ArrayList并用该信息打开一个新活动。问题是,它在打开该活动时关闭。我相信这和它有关,没有正确的序列化。任何帮助都会很棒,谢谢

顺便说一句,它取消赎回权的原因是反序列化的ArrayList为空

以下是第一个Java文件:

package com.frostbytedev.randomgenie;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import java.io.*;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by Steven on 6/11/13.
 */
public class NewList extends Activity implements Serializable, View.OnClickListener{
    String ListName;
    String ItemText;
    int i = 0;

    List<String> List = new ArrayList<String>();
    Button save;
    EditText FileName, etItem1, etItem2, etItem3, etItem4, etItem5;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.newlist);
        initilize();
    }

    private void IndexList() {
        List.add(FileName.getText().toString());
        List.add(etItem1.getText().toString());
        List.add(etItem2.getText().toString());
        List.add(etItem3.getText().toString());
        List.add(etItem4.getText().toString());
        List.add(etItem5.getText().toString());

        for(i=1;i<5;i++){
            ItemText = List.get(i);
            if(ItemText.contentEquals("")){
                List.remove(List.get(i));
            }
        }

    }

    private void initilize() {
        save = (Button)findViewById(R.id.bSave);
        FileName = (EditText)findViewById(R.id.etFileName);
        etItem1 = (EditText)findViewById(R.id.etItem1);
        etItem2 = (EditText)findViewById(R.id.etItem2);
        etItem3 = (EditText)findViewById(R.id.etItem3);
        etItem4 = (EditText)findViewById(R.id.etItem4);
        etItem5 = (EditText)findViewById(R.id.etItem5);
        save.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        switch(view.getId()){

            case R.id.bSave:
                IndexList();
                try {
                    SaveList();
                } catch (IOException e) {
                    e.printStackTrace();
                }


        }
    }


    private void SaveList() throws IOException {
        String filename = FileName.getText().toString()+".txt";
        FileOutputStream fos;
        try {
            fos = openFileOutput(filename,Context.MODE_PRIVATE);
            ObjectOutputStream out = new ObjectOutputStream(fos);
            out.writeObject(List);
            out.close();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();

        }
    }
}

任何帮助都会很棒

方法
反序列化
不在堆栈跟踪上,因此空列表
文件名
中的错误行

String FileName = textFiles.get(position);

从文件系统读取文件时,您会剪切txt扩展名:

textFiles.add(file.getName().replace(".txt", ""))
单击项目时,将使用该文件名反序列化列表。但原始文件是使用txt扩展名编写的,因此找不到该文件,反序列化失败,列表为空,list.get(1)将引发IndexOutOfBoundsException。 你能做的是:

fis = new FileInputStream(filename+".txt");
我很确定logcat输出在IndexOutOfBoundsException之上还有一个FileNotFoundException


顺便说一句,将变量命名为方法是一个非常糟糕的主意。如果变量名为textFiles,则使用getTextFiles()作为方法。

LogCat已添加,任何帮助?“List”都是变量的错误选择name@AndyRoyD. 你为什么不直接把名单传给意向书呢,(java.util.ArrayList)ListSelect.java:44是哪一行?为什么要发布两次相同的问题?你的应用程序没有问题,只是在设计和编码风格上有点混乱。这就是为什么它不运行,也就是为什么很难找到这个小错误。此外,您只提供了回答问题所需的一半信息。好的,这是有道理的,但我应该怎么做才能解决这个问题?啊哈。。。。很好的发现,但是它得到了相同的错误。你能添加你在反序列化方法中得到的stacktrace吗?必须有来自ex.printStackTrace()的输出;
textFiles.add(file.getName().replace(".txt", ""))
fis = new FileInputStream(filename+".txt");