我正在解析的xml文件是alltrains.xml,如下所示
<?xml version="1.0" encoding="utf-8"?>
<resources>
<train>
<trainno>02018</trainno>
<name>GKP LTT PREMIUM</name>
<sourcestation>GORAKHPUR JN</sourcestation>
<deptime>08:25</deptime>
<destinationstation>LOKMANYATILAK T</destinationstation>
<destarrtime>11:50</destarrtime>
</train>
<train>
<trainno>02529</trainno>
<name>GKP UHP PREMIUM</name>
<sourcestation>GORAKHPUR JN</sourcestation>
<deptime>20:55</deptime>
<destinationstation>UDHAMPUR</destinationstation>
<destarrtime>21:30</destarrtime>
</train>
<train>
<trainno>02530</trainno>
<name>UHP GKP PREMIUM</name>
<sourcestation>UDHAMPUR</sourcestation>
<deptime>23:45</deptime>
<destinationstation>GORAKHPUR JN</destinationstation>
<destarrtime>23:20</destarrtime>
</train>
<train>
<trainno>02680</trainno>
<name>SVDK YPR PREMIUM</name>
<sourcestation>SHMATA VD KATRA</sourcestation>
<deptime>06:30</deptime>
<destinationstation>YESVANTPUR JN</destinationstation>
<destarrtime>15:00</destarrtime>
</train>
<train>
<trainno>02696</trainno>
<name>JP YPR PREMIUM</name>
<sourcestation>JAIPUR</sourcestation>
<deptime>22:15</deptime>
<destinationstation>YESVANTPUR JN</destinationstation>
<destarrtime>17:55</destarrtime>
</train>
</resources>
MainActivity.java的代码如下
public class MainActivity extends AppCompatActivity
{
static Resources myResources;
static InputStream inputStream;
TechCrunchTask downloadTask;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myResources = getResources();
downloadTask=new TechCrunchTask();
downloadTask.execute();
}
public static class TechCrunchTask extends AsyncTask<Void,Void,ArrayList<HashMap<String,String>>>
{
@Override
protected ArrayList<HashMap<String,String>> doInBackground(Void... params)
{
ArrayList<HashMap<String,String>> results=new ArrayList<>();
try {
inputStream = myResources.openRawResource(R.raw.alltrains);
results=ProcessXml(inputStream);
}
catch (Exception e)
{
//e.printStackTrace();
}
return results;
}
@Override
protected void onPostExecute(ArrayList<HashMap<String,String>> result)
{
// L.m(result+"");
}
public ArrayList<HashMap<String,String>> ProcessXml (InputStream inputStream) throws Exception
{
DocumentBuilderFactory documentBuilderFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder=documentBuilderFactory.newDocumentBuilder();
Document xmlDocument=documentBuilder.parse(inputStream);
Element RootElement=xmlDocument.getDocumentElement();
Log.d("ResourceName",xmlDocument.getDocumentElement().toString());
NodeList itemList=RootElement.getElementsByTagName("train");
Node CurrentItem=null;
NodeList ItemChildren=null;
Node CurrentChild=null;
NamedNodeMap MediaThumbnailAttributes=null;
Node CurrentAttribute=null;
int count=0;
ArrayList<HashMap<String,String>> results=new ArrayList<>();
for(int i=0;i<itemList.getLength();i++)
{
CurrentItem=itemList.item(i);
ItemChildren=CurrentItem.getChildNodes();
for(int j=0;j<ItemChildren.getLength();j++)
{
TrainObject trainObject=new TrainObject();
CurrentChild=ItemChildren.item(j);
String name="";
int id;
trainObject.setId(i+1);
Log.d("ID",Integer.toString(trainObject.getId()));
if(CurrentChild.getNodeName().equalsIgnoreCase("name"))
{
name=CurrentChild.getTextContent();
// Log.d("Name",name);
trainObject.setTrainName(name);
Log.d("Name",trainObject.getTrainName());
Log.d("Object",""+Integer.toString(trainObject.getId())+":"+Integer.toString(trainObject.getTrainNo()));
}
if(CurrentChild.getNodeName().equalsIgnoreCase("trainno"))
{
id=Integer.parseInt(CurrentChild.getTextContent());
//Log.d("ID",Integer.toString(id));
trainObject.setTrainNo(id);
Log.d("Trainno",Integer.toString(trainObject.getTrainNo()));
Log.d("Object2",""+Integer.toString(trainObject.getId())+":"+Integer.toString(trainObject.getTrainNo())+":"+trainObject.getTrainName());
}
}
}
return results;
}//End of ProcessXml Function
}
TrainObject.java类的代码如下
package xml_parsing_slidev2.ats.com.xml_parsing_slidev2;
public class TrainObject
{
int id;
int TrainNo;
String TrainName;
public int getId()
{
return id;
}
public void setId(int id)
{
this.id = id;
}
public int getTrainNo()
{
return TrainNo;
}
public void setTrainNo(int trainno)
{
this.TrainNo = trainno;
}
public String getTrainName()
{
return TrainName;
}
public void setTrainName(String trainName)
{
this.TrainName = trainName;
}
}
如果我在自己的if块中访问trainno和name的值,但是如果我集体访问这些代码,那么这段代码工作正常就像我试图用语句访问
Log.d("Object2",""+Integer.toString(trainObject.getId())+":"+
Integer.toString(trainObject.getTrainNo())+":"+trainObject.getTrainName());
它只显示了Trainno,并没有显示列车名称而是显示 显示空值
请指导我如何一次性获取所有值,以便我可以将其传递给我的autocompleteTextView。 感谢
答案 0 :(得分:0)
第一个错误:您再次在字段的每次迭代中创建trainObject。所以前面的迭代实例丢失了。在j循环之前创建它:
TrainObject trainObject=new TrainObject();
for(int j=0;j<ItemChildren.getLength();j++)
{
CurrentChild=ItemChildren.item(j);
第二:你不能依赖订购。事实上,当我运行程序时,第二个if在第一个之前执行。所以输出&#34; Object2&#34;在名称甚至可以阅读之前完成。如果在j循环结束后使用所有字段添加输出(例如在name-if中),您应该看到所有成员已分配。