Java android-如何从文件中检索MPAndroidChart ArrayList

Java android-如何从文件中检索MPAndroidChart ArrayList,java,android,arraylist,mpandroidchart,Java,Android,Arraylist,Mpandroidchart,我正在我的应用程序中使用MPAndroidChart,我想将ArrayList保存在一个文件中,供以后使用。 在这里,我将其保存到内部存储器中的文件中: ArrayList<Entry> entries = getIntent().getParcelableArrayListExtra(getString(R.string.entries_key)); // Save chart data FileOutputStream out; try { out = openFileOu

我正在我的应用程序中使用MPAndroidChart,我想将
ArrayList
保存在一个文件中,供以后使用。 在这里,我将其保存到内部存储器中的文件中:

ArrayList<Entry> entries = getIntent().getParcelableArrayListExtra(getString(R.string.entries_key));

// Save chart data
FileOutputStream out;
try {
  out = openFileOutput("listFile", MODE_PRIVATE);

  ObjectOutputStream outputStream = new ObjectOutputStream(out);
  outputStream.writeObject(entries);
  outputStream.close();

  } catch (Exception e) {
     e.printStackTrace();
  } finally {
  try {

    if (out != null) {
      out.close();
    }

  } catch (IOException e) {
    e.printStackTrace();
  }
}
我已经仔细检查过了,我确信我读的是正确的文件,所以问题一定是这一行

ArrayList条目=(ArrayList)objectInputStream.readObject()

我在这里找到了从文件中读取ArrayList的方法

我能做些什么来解决这个问题? 感谢文档中所说的:

只能选择支持java.io.Serializable接口的对象 写入流


ArrayList
实现了
Serializable
接口,但它引用了
条目
类,而该类没有。因此,
Entry
对象没有序列化(即,没有保存或还原)。

我用一种老套的方法解决了这个问题。。我创建了一个自定义的
MyEntry
类,它实现了
Serializable

public class MyEntry implements Serializable {

   private float x;
   private float y;

   public MyEntry(float x, float y) {
       this.x = x;
       this.y = y;
   }

   public MyEntry(){

   }

   public float getX() {
       return x;
   }

   public float getY() {
       return y;
   }

   public void setX(float x) {
       this.x = x;
   }

   public void setY(float y) {
       this.y = y;
   }
} 
然后,当我需要保存数据时,我从
ArrayList
获取数据并将其存储在
ArrayList


在这里,Entry类似乎实现了这个尚未批准/合并到master(或其他产品)中的可序列化拉请求
public class MyEntry implements Serializable {

   private float x;
   private float y;

   public MyEntry(float x, float y) {
       this.x = x;
       this.y = y;
   }

   public MyEntry(){

   }

   public float getX() {
       return x;
   }

   public float getY() {
       return y;
   }

   public void setX(float x) {
       this.x = x;
   }

   public void setY(float y) {
       this.y = y;
   }
} 
// Save chart data
FileOutputStream out = null;

out = openFileOutput(recordName, MODE_PRIVATE);
ObjectOutputStream outputStream = new ObjectOutputStream(out);
ArrayList<MyEntry> myEntries = new ArrayList<>();

for (int k = 0; k < entries.size(); k++) {
  Entry currentEntry = entries.get(k);
  MyEntry currentMyEntry = new MyEntry();
  currentMyEntry.setX(currentEntry.getX());
  currentMyEntry.setY(currentEntry.getY());
  myEntries.add(currentMyEntry);
}

outputStream.writeObject(myEntries);
outputStream.close();
FileInputStream inputStream;

inputStream = openFileInput(fileListName);
ObjectInputStream objectInputStream = new ObjectInputStream(inputStream);

ArrayList <MyEntry> myEntries = (ArrayList<MyEntry>) objectInputStream.readObject();
ArrayList<Entry> entries = new ArrayList<>();
for (int i = 0; i < myEntries.size(); i++) {
  MyEntry currentMyEntry = myEntries.get(i);
  Entry currentEntry = new Entry();
  currentEntry.setX(currentMyEntry.getX());
  currentEntry.setY(currentMyEntry.getY());
  entries.add(currentEntry);
}

// Set chart properties
chart = ChartUtils.setChartProperties(chart);

LineDataSet lineDataSet = ChartUtils.createSet(ChartViewer.this, entries);

LineData data = new LineData(lineDataSet);
chart.setData(data);