Java 使用异步任务进行XML解析
我想从特定Url获取货币,但AsyncTask给了我运行时错误:我找不到我必须做的事情Java 使用异步任务进行XML解析,java,android,xml,parsing,android-asynctask,Java,Android,Xml,Parsing,Android Asynctask,我想从特定Url获取货币,但AsyncTask给了我运行时错误:我找不到我必须做的事情 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebServisXML xmlRead = new WebServisXML(this);
xmlRead.execute("http://www.tcmb.gov.tr/kurlar/today.xml");
}
public class WebServisXML extends AsyncTask<String, String, List<String>> {
private Context context;
private ListView listView;
private ProgressDialog dialogBar;
List<String> dovizListe = new ArrayList<String>();
HttpURLConnection baglanti = null;
public WebServisXML(Context context) {
this.context = context;
listView = (ListView) ((AppCompatActivity) context).findViewById(R.id.listView);}
protected void onPreExecute() {
super.onPreExecute();
dialogBar = ProgressDialog.show(context, "Lütfen bekleyiniz...", "İşlem yükleniyor...", true);
}
@Override
protected List<String> doInBackground(String... params) {
try {
URL adressOfLink = new URL(params[0]);
baglanti = (HttpURLConnection) adressOfLink.openConnection();
int responceCode = baglanti.getResponseCode();
if (responceCode == HttpURLConnection.HTTP_OK) {
BufferedInputStream stream = new BufferedInputStream(baglanti.getInputStream());
publishProgress("Döviz kurları okunuyor...");
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
Document document = documentBuilder.parse(stream);
NodeList dovizNodeList = document.getElementsByTagName("Currency");
for (int i = 0; i < dovizNodeList.getLength(); i++) {
Element element = (Element) dovizNodeList.item(i);
NodeList nodeBirim = element.getElementsByTagName("Unit");
NodeList nodeIsim = element.getElementsByTagName("Isim");
NodeList nodeAlis = element.getElementsByTagName("ForexBuying");
NodeList nodeSatis = element.getElementsByTagName("ForexSelling");
String birim = nodeBirim.item(0).getFirstChild().getNodeValue();
String isim = nodeIsim.item(0).getFirstChild().getNodeValue();
String alis = nodeAlis.item(0).getFirstChild().getNodeValue();
String satis = nodeSatis.item(0).getFirstChild().getNodeValue();
dovizListe.add(birim + " " + isim + " Alış:" + alis + " Satış:" + satis);
}
publishProgress("Liste güncelleniyor...");
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}finally {
if(baglanti!=null)
baglanti.disconnect();
}
return dovizListe;
}
@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
dialogBar.setMessage(values[0]);
}
@Override
protected void onPostExecute(List<String> strings) {
super.onPostExecute(strings);
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(context,android.R.layout.simple_expandable_list_item_1,strings);
listView.setAdapter(arrayAdapter);
dialogBar.cancel();
}
}}
public类MainActivity扩展了AppCompatActivity{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webservicesxml xmlRead=新的webservicesxml(此);
xmlRead.execute(“http://www.tcmb.gov.tr/kurlar/today.xml");
}
公共类WebServicesXML扩展异步任务{
私人语境;
私有列表视图列表视图;
私有进程对话框栏;
List dovizListe=new ArrayList();
HttpURLConnection baglanti=null;
公共WebServicesXML(上下文){
this.context=上下文;
listView=(listView)((AppCompatActivity)上下文).findViewById(R.id.listView);}
受保护的void onPreExecute(){
super.onPreExecute();
dialogBar=ProgressDialog.show(上下文,“Lütfen Bekleyinazing…”,“lem yükleniyor…”,true);
}
@凌驾
受保护列表doInBackground(字符串…参数){
试一试{
URL adressOfLink=新URL(参数[0]);
baglanti=(HttpURLConnection)adressolink.openConnection();
int responceCode=baglanti.getResponseCode();
if(responceCode==HttpURLConnection.HTTP\u确定){
BufferedInputStream=新的BufferedInputStream(baglanti.getInputStream());
出版进展(“Döviz kurlarıokunuyor…”);
DocumentBuilderFactory DocumentBuilderFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder DocumentBuilder=documentBuilderFactory.newDocumentBuilder();
Document Document=documentBuilder.parse(流);
NodeList dovizNodeList=document.getElementsByTagName(“货币”);
for(int i=0;i
这是我的错误屏幕:
第一个子节点的其中一个节点为
null
。(节点没有子节点)
没有正确的行号,我无法告诉你是哪一个。(MainActivity.java的第98行)
我建议增加一张支票:
String birim = nodeBirim.item(0).getLength() > 0 ? nodeBirim.item(0).getFirstChild().getNodeValue() : "";
String isim = nodeIsim.item(0).getLength() > 0 ? nodeIsim.item(0).getFirstChild().getNodeValue() : "";
String alis = nodeAlis.item(0).getLength() > 0 ? nodeAlis.item(0).getFirstChild().getNodeValue() : "";
String satis = nodeSatis.item(0).getLength() > 0 ? nodeSatis.item(0).getFirstChild().getNodeValue() : "";
哪一行是空的?请在此处添加堆栈跟踪,而不是作为图像,以便我们轻松复制和粘贴其中的部分。谢谢