有没有办法通过 Intent 和 Parcelable 传递 JAXP 节点或文档?JAXP 没有实现 Parcelable,所以答案可能是 --no。有没有实现 Parcelable 的 DOM 库?有人可以提供一个可行的例子吗?
序列化不是一种选择;令人讨厌的表现受到打击。将数据存储在 res/xml 中不是一种选择:它最终必须(在项目结束时)在磁盘上加密。Android 的“编译”XML 访问工具不支持解密整个 XML。当然,我可以自己上课。
这是我膨胀 XML 的起始代码。我的目标是将节点或文档从一个 ListView 传递到另一个,通过 Lists 有效地钻取 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);
}
});
}
}