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