Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用异步任务进行XML解析_Java_Android_Xml_Parsing_Android Asynctask - Fatal编程技术网

Java 使用异步任务进行XML解析

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);

我想从特定Url获取货币,但AsyncTask给了我运行时错误:我找不到我必须做的事情

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() : "";

哪一行是空的?请在此处添加堆栈跟踪,而不是作为图像,以便我们轻松复制和粘贴其中的部分。谢谢