我是安卓工作室的新手,有一个问题似乎无法解决。我正在使用for循环解析网站中的一些XML,以获取每个元素。我的问题是,如何在for循环的第一次迭代中暂停它,这样它就不会继续到下一次,直到点击这个按钮?
这是我的for循环:
try {
URL url = new URL("http://www.website.xml");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new InputSource(url.openStream()));
doc.getDocumentElement().normalize();
NodeList nodeList = doc.getElementsByTagName("patient_order");
/** Assign textview array length by arraylist size */
patientName = new TextView[nodeList.getLength()];
patientID = new TextView[nodeList.getLength()];
medicine = new TextView[nodeList.getLength()];
dosage = new TextView[nodeList.getLength()];
refillsRemaining = new TextView[nodeList.getLength()];
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
patientName[i] = new TextView(this);
patientID[i] = new TextView(this);
medicine[i] = new TextView(this);
dosage[i] = new TextView(this);
refillsRemaining[i] = new TextView(this);
Element fstElmnt = (Element) node;
NodeList nameList = fstElmnt.getElementsByTagName("patientName");
Element nameElement = (Element) nameList.item(0);
nameList = nameElement.getChildNodes();
patientName[i].setText("Patient: "
+ ((Node) nameList.item(0)).getNodeValue());
NodeList websiteList = fstElmnt.getElementsByTagName("patientID");
Element websiteElement = (Element) websiteList.item(0);
websiteList = websiteElement.getChildNodes();
patientID[i].setText("ID: "
+ ((Node) websiteList.item(0)).getNodeValue());
NodeList medicineList = fstElmnt.getElementsByTagName("medicine");
Element medicineElement = (Element) medicineList.item(0);
medicineList = medicineElement.getChildNodes();
medicine[i].setText("RX: "
+ ((Node) medicineList.item(0)).getNodeValue());
NodeList dosageList = fstElmnt.getElementsByTagName("dosage");
Element dosageElement = (Element) dosageList.item(0);
dosageList = dosageElement.getChildNodes();
dosage[i].setText("Dosage: "
+ ((Node) dosageList.item(0)).getNodeValue());
NodeList refillsList = fstElmnt.getElementsByTagName("refillsRemaining");
Element refillsElement = (Element) refillsList.item(0);
refillsList = refillsElement.getChildNodes();
refillsRemaining[i].setText("Remaining: "
+ ((Node) refillsList.item(0)).getNodeValue());
layout.addView(patientName[i]);
layout.addView(patientID[i]);
layout.addView(medicine[i]);
layout.addView(dosage[i]);
layout.addView(refillsRemaining[i]);
btn.setOnClickListener(new View.OnClickListener()
{
public void onClick(View view)
{
//What is going to happen to make the for loop continue
}
});
}//end for
} //end try
您永远不想暂停UI线程,所以创建一个新线程来执行for循环http://developer.android.com/training/multiple-threads/communicate-ui.html应该列出一些选项,以便在主UI线程(不能不惜一切代价堵塞(和执行实际工作的侧线程之间进行通信。您的主UI线程正忙于保持屏幕活动和响应,因此暂停它通常是不允许的。
您可以使用这个答案中的方法:如何从另一个线程暂停和恢复Java中的线程。但它在你的情况下不起作用
因为
-
从不暂停UI线程。它挂起你的用户界面并指向ANR。也不要在UI线程中使用网络和其他重量级操作。你可以使用AyncTask来做艰苦的工作。如果您将XML解析代码封装在
AsyncTask
中,则可以用onClick()
方法启动它。所以你不需要暂停循环 - 你真的需要
TextView
的数组吗?如果您需要显示数据列表,为什么不使用ListView