有没有办法通过通过一个意图和Parcelable一个JAXP节点或文档? JAXP没有实现Parcelable,所以答案很可能是--no。 有没有实现Parcelable任何DOM库? 有人可以提供一个工作的例子吗?
序列化是不是一种选择; 讨厌的性能损失。 在res / XML存储的数据是不是一种选择:它最终必须(由项目结束)在磁盘上加密。 Android的“编译” XML访问工具不支持解密整个XML。 当然,我可以用一个类做我自己。
下面是膨胀的XML我的起动代码。 我的目标是从一个ListView控件传递一个节点或到另一个文件,有效地向下钻取通过列表的DOM。
我的文档包含所有活动需要共享信息。 每个活动访问不同的节点,并提取新的信息。 我认为通过全球露出文件,但我不认为这将是安全的多种活动来访问它的方式。
此外,在工作代码下面我打算通过一个节点到第二ListActivity而不是一个字符串,只是还没有得到那么远。
package com.example
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.*;
import android.widget.AdapterView.OnItemClickListener;
public class JAXPListActivity extends ListActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Document doc = null;
try {
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
doc = builder.parse(new File("/sdcard/example.xml"));
} catch (Exception e) {
e.printStackTrace(); //TO-DO: exception handling
}
NodeList nodes = doc.getChildNodes();
String[] nodeList = new String[nodes.getLength()];
for(int i = 0; i<nodes.getLength(); i++) {
Node node = nodes.item(i);
nodeList[i] = nodes.item(i).getNodeName();
}
this.setListAdapter(new ArrayAdapter<String>(this,
R.layout.list_item,
R.id.label, nodeList));
ListView lv = getListView();
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
String nodeName = ((TextView) view).getText().toString();
Intent i = new Intent(getApplicationContext(),
JAXPNodeListActivity.class);
i.putExtra("nodeName", nodeName);
startActivity(i);
}
});
}
}