我以前也问过这个问题,但这次我做了一些研究并回来了,因为我没有得到任何关于我的问题的答案。
我有一个 data.xml 文件,其中包含我想提供给我的 android 应用程序的数据。我已经完成了 android-end 编码,我认为它完美无缺。但是数据没有从文件中检索到我的应用程序中。我的文件结构是这样的:
(a)data.xml (b)Main (c)HandlingXMLStuff (d)XMLDataCollected
(a)data.xml
<?xml version="1.0" encoding="utf-8"?>
<document version="first">
<stuff code="firststuff">
<item1 build="first">This is first item.</item1>
<item2 build="second">This is second item.</item2>
<item3 build="third">This is third item.</item3>
</stuff>
<stuff code="secondtstuff">
<item1 build="first">This is first item.</item1>
<item2 build="second">This is second item.</item2>
<item3 build="third">This is third item.</item3>
</stuff>
<stuff code="thirdstuff">
<item1 build="first">This is first item.</item1>
<item2 build="second">This is second item.</item2>
<item3 build="third">This is third item.</item3>
</stuff>
</document>
(b)主要
package com.xyz.xmlpar1;
import java.net.URL;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class Main extends Activity implements OnClickListener {
static final String BaseURL="http://www.xyz.com/data.xml?code=";
Button b;
TextView tv;
EditText et1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
et1=(EditText) findViewById(R.id.editText1);
b=(Button) findViewById(R.id.button1);
tv=(TextView) findViewById(R.id.textView1);
b.setOnClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String item=et1.getText().toString();
StringBuilder URL=new StringBuilder(BaseURL);
URL.append(item);
String fullURL=URL.toString();
try{
URL website=new URL(fullURL);
SAXParserFactory spf=SAXParserFactory.newInstance();
SAXParser sp=spf.newSAXParser();
XMLReader xr=sp.getXMLReader();
HandlingXMLStuff doingWork=new HandlingXMLStuff();
xr.setContentHandler(doingWork);
xr.parse(new InputSource(website.openStream()));
String information=doingWork.getInformation();
tv.setText(information);
}catch(Exception e){
tv.setText("error");
}
}
}
(c)处理XMLStuff
package com.xyz.xmlpar1;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class HandlingXMLStuff extends DefaultHandler {
XMLDataCollected info=new XMLDataCollected();
public String getInformation(){
return info.datatoString();
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
if(localName.equals("code")){
String element=attributes.getValue("build");
info.setData(element);
}
}
}
(d)XMLDataCollected
package com.xyz.xmlpar1;
public class XMLDataCollected {
String datac=null;
public void setData(String c){
datac=c;
}
public String datatoString(){
return datac;
}
}
因此,当我键入第一个或第二个或第三个时,它应该检索数据。但事实并非如此。我究竟做错了什么?