是否有任何方式通過意圖和Parcelable傳遞JAXP節點或文檔? JAXP沒有實現Parcelable,所以答案可能是 - 沒有。有沒有實現Parcelable的DOM庫?有人可以提供一個工作的例子嗎?有沒有什麼辦法通過Intent和Parcelable傳遞DOM對象?
序列化不是一種選擇;令人討厭的表現。將數據存儲在res/xml中不是一個選項:它最終(在項目結束時)必須在磁盤上加密。 Android的「編譯」XML訪問工具不支持解密整個XML。當然,我可以在課堂上自己做。
這是我的初學者代碼,它擴大了XML。我的目標是將節點或文檔從一個ListView傳遞到另一個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);
}
});
}
}
好吧,顯然通過Intents傳遞數據是不滿意的,顯然沒有putExtra()方法的Object。我仍然想知道是否有人用Parcelable實現重新打包DOM對象。也許我會試試看。 – yetimoner
您可以嘗試使用:getIntent()。getSerializableExtra(nodeName) –
該解決方案無法使用序列化:它是所述要求之一。 – yetimoner