Java android-如何从文件中检索MPAndroidChart ArrayList
我正在我的应用程序中使用MPAndroidChart,我想将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
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);