如何使用背景流保存文件 Android
目前我创建了一个使用的函数 XmlSerializer 创建文件 XML 来自物体。 我探索了使用各种形式的多线程来保存背景中的文件直到 GUI 仍然使用并仍然更新。 我看着使用 AsyncTask 为此,但不确定这是实现它的最佳方式。 拜托,有人可以帮助我,并提前感谢您。
这是我到目前为止的代码:
</dataobject>
这是我到目前为止的代码:
private String fileName;
private DataObjects dataObjects;
public SetCachedValuesFile//
{
}
public void setFileName/String refFileName/
{
fileName = refFileName;
}
public void setDataObjects/DataObjects refDataObjects/
{
dataObjects = refDataObjects;
}
public String getFileName//
{
return fileName;
}
public DataObjects getDataObjects//
{
return dataObjects;
}
public void updateValues//
{
ArrayList<dataobject> arrayListDataObject = dataObjects.getDataObjects//;
try
{
/* Creates a new file and its directory. */
File directory = new File/Environment.getExternalStorageDirectory// + "/XML_FILES/"/;
directory.mkdirs//;
File newFile = new File/directory, fileName + ".xml"/;
FileOutputStream fos = new FileOutputStream/newFile/;
/* Creates a new XML serializer which creates the structure of the XML file. */
XmlSerializer serializer = Xml.newSerializer//;
serializer.setOutput/fos, "UTF-8"/;
serializer.startDocument/null, true/;
serializer.startTag/"", "CachedValues"/;
for/DataObject dataObject : arrayListDataObject/
{
if/dataObject.getClass//.equals/StringDataObject.class//
{
StringDataObject stringDataObject = /StringDataObject/ dataObject;
String address = HexFunctions.toString/stringDataObject.getAddress///;
String value = stringDataObject.getValue//;
serializer.startTag/"", "DataObject"/;
serializer.startTag/"", "Address"/;
serializer.text/address/;
serializer.endTag/"", "Address"/;
serializer.startTag/"", "Value"/;
serializer.text/value/;
serializer.endTag/"", "Value"/;
serializer.endTag/"", "DataObject"/;
System.out.println/"String data object added to file."/;
}
else if/dataObject.getClass//.equals/IntDataObject.class//
{
IntDataObject intDataObject = /IntDataObject/ dataObject;
String address = HexFunctions.toString/intDataObject.getAddress///;
String value = Integer.toString/intDataObject.getValue///;
serializer.startTag/"", "DataObject"/;
serializer.startTag/"", "Address"/;
serializer.text/address/;
serializer.endTag/"", "Address"/;
serializer.startTag/"", "Value"/;
serializer.text/value/;
serializer.endTag/"", "Value"/;
serializer.endTag/"", "DataObject"/;
System.out.println/"Int data object added to file."/;
}
else if/dataObject.getClass//.equals/FloatDataObject.class//
{
FloatDataObject floatDataObject = /FloatDataObject/ dataObject;
String address = HexFunctions.toString/floatDataObject.getAddress///;
String value = Float.toString/floatDataObject.getValue///;
serializer.startTag/"", "DataObject"/;
serializer.startTag/"", "Address"/;
serializer.text/address/;
serializer.endTag/"", "Address"/;
serializer.startTag/"", "Value"/;
serializer.text/value/;
serializer.endTag/"", "Value"/;
serializer.endTag/"", "DataObject"/;
System.out.println/"Float data object added to file."/;
}
else if/dataObject.getClass//.equals/DoubleDataObject.class//
{
DoubleDataObject doubleDataObject = /DoubleDataObject/ dataObject;
String address = HexFunctions.toString/doubleDataObject.getAddress///;
String value = Double.toString/doubleDataObject.getValue///;
serializer.startTag/"", "DataObject"/;
serializer.startTag/"", "Address"/;
serializer.text/address/;
serializer.endTag/"", "Address"/;
serializer.startTag/"", "Value"/;
serializer.text/value/;
serializer.endTag/"", "Value"/;
serializer.endTag/"", "DataObject"/;
System.out.println/"Double data object added to file."/;
}
}
serializer.endTag/"", "CachedValues"/;
serializer.endDocument//;
serializer.flush//;
fos.close//;
System.out.println/"File created"/;
System.out.println/"File name: " + newFile.getAbsolutePath///;
}
catch /IllegalArgumentException e/
{
e.printStackTrace//;
}
catch /IllegalStateException e/
{
e.printStackTrace//;
}
catch /IOException e/
{
e.printStackTrace//;
}
}
</dataobject>
没有找到相关结果
已邀请:
2 个回复
帅驴
赞同来自:
但是,如果您不需要更新 UI 作为背景任务的一部分/ 显然在这里发生了什么/, 然后只使用通常的课程 Thread, 这更容易实现 /edit: code added for updating the UI from a background thread/:
请注意,在重新启动活动时,请保存此类流式传输,因此通常应在完成之前执行。
这样做 AsyncTask /什么可能是最好的选择 UI 需要更新/, 可以使用相同的方法:
在我们的活动中,创建课堂的实例 Async 并执行它。
子类 AsyncTask 作为您的活动中的私人课程
</string,>
帅驴
赞同来自:
相反,您需要做些什么:
此外,如果您需要再次执行任务,可以使用处理程序并将其称为 runnable 通过以下方式:
请参阅这些链接。
https://coderoad.ru/2711183/
https://coderoad.ru/23503247/