2012-12-22 84 views
1

helo,我想读取这个文件中的值:http://www.nbp.pl/kursy/xml/lastC.xml并用它们填充网格。我的应用程序下载此文件并将其保存在SDCard上,等待它运行。我的问题是我的代码读取空值。这就是:android,从SD卡中读取xml文件中的值

@Override 
protected void onCreate(Bundle savedInstanceState) { 

super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    grid= (GridView)findViewById(R.id.grid); 

    try{  
      url = new URL("http://www.nbp.pl/kursy/xml/LastC.xml"); 

      HttpURLConnection connection = (HttpURLConnection)url.openConnection(); 

      connection.setRequestMethod("GET"); 


      connection.setDoOutput(true); 
      connection.connect(); 



      File dir = new File (android.os.Environment.getExternalStorageDirectory().getAbsolutePath() + "/Kursy Walut"); 
       if(dir.exists()==false) 
        dir.mkdirs(); 

      File file = new File(dir, "kursywalut.xml"); 

     FileOutputStream fileoutput = new FileOutputStream(file); 

     InputStream inputstream = connection.getInputStream(); 

      int tempSize=0; 


      byte[] buffer = new byte[1024]; 

      while((tempSize = inputstream.read(buffer))>0) 
      { 

       fileoutput.write(buffer, 0, tempSize); 

      } 

fileoutput.close(); 

在我的SD卡存储文件,并举杯与信息

Toast.makeText(MainActivity.this, "pobrano do Kursy Walut/kursywalut.xml!!", Toast.LENGTH_SHORT).show(); 

    //here i have a array of string witch i will parse into my grid 

    String[] items=new String[13]; 

    InputStream in = new FileInputStream(file.getPath()); 

    DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 

    Document doc = builder.parse(in); 
    NodeList words = doc.getElementsByTagName("pozycja"); 

    for(int i=0; i<words.getLength(); i++) 
    { 
     items[i]= ((Element)words.item(i)).getAttribute("kod_waluty"); 

    } 

    //i setText on some textView to check that i read xmlfile correctly. 

    text.setText("value: "+items[5]); 
     in.close(); 



     grid.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, items)); 
} 
catch(Throwable t){Toast.makeText(this, t.toString(), Toast.LENGTH_LONG).show();} 


} 

这个代码我TextView的文本仅是“值”后没有任何价值从XML 和我的网格空。我假设我在阅读XML文件时犯了错误。 如果有人可以看看这个,并帮助我解决它,我会非常高兴。

+0

更新与更新代码的问题。 –

回答

2

请使用下面的代码从SD卡使用Dom Parser解析XML文件,它将解决您的问题。

MainActivity.java:-

public class MainActivity extends Activity { 

    ArrayList<String> mImageLink; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     try { 
      mImageLink = new ArrayList<String>(); 

      File file = new File("mnt/sdcard/kursywalut.xml"); 
      InputStream is = new FileInputStream(file.getPath()); 
      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
      DocumentBuilder db = dbf.newDocumentBuilder(); 
      Document doc = db.parse(new InputSource(is)); 
      doc.getDocumentElement().normalize(); 

      NodeList nodeList = doc.getElementsByTagName("image"); 

      for (int i = 0; i < nodeList.getLength(); i++) { 

       Node node = nodeList.item(i); 

       Element fstElmnt = (Element) node; 

       mImageLink.add(fstElmnt.getAttribute("link")); 

      } 
     } catch (Exception e) { 
      System.out.println("XML Pasing Excpetion = " + e); 
     } 
    } 
} 
+0

它没有帮助; /我仍然在我的“kod_waluty”属性中获得空值。我发布了链接到我的xml文件。 http://www.nbp.pl/kursy/xml/lastC.xml –