2012-12-10 32 views
0

我需要有時從遠程服務器讀取XML文件,並在我的Android設備上用XML替換數據。 我通過XmlPullParser讀取數據:如何在Android上編寫XML文件,從遠程服務器獲取

XmlPullParser users; 
      try { 
       URL xmlUrl = new URL("http://xx.xx.xx.xx/1.xml"); 
       users = XmlPullParserFactory.newInstance().newPullParser(); 
       users.setInput(xmlUrl.openStream(), null); 

      } 

我怎麼能代替它在Android?

回答

0

只需使用此代碼,它會用從互聯網上下載的新文件覆蓋文件。

public static boolean downloadFile(String fileToDownload, File newPath, 
      String newFileName) { 
     try { 
      URL url = new URL(fileToDownload); 
      HttpURLConnection urlConnection = (HttpURLConnection) url 
        .openConnection(); 
      urlConnection.setRequestMethod("GET"); 
      urlConnection.setDoOutput(true); 
      urlConnection.connect(); 
      if (!newPath.isDirectory()) { 

       CreateLog.createFolder(newPath.toString()); 
      } 
      File file = new File(newPath.toString() + "/" + newFileName); 
      if (!file.isFile()) { 
       CreateLog.writeLogToFile(newPath.toString() + newFileName, 
         "%TEMP%"); 
      } 

      FileOutputStream fileOutput = new FileOutputStream(file); 
      InputStream inputStream = urlConnection.getInputStream(); 

      byte[] buffer = new byte[1024]; 
      int bufferLength = 0; 

      while ((bufferLength = inputStream.read(buffer)) > 0) { 
       fileOutput.write(buffer, 0, bufferLength); 
      } 
      fileOutput.close(); 
      return true; 

     } catch (MalformedURLException e) { 
      CreateLog.addToLog(e.toString()); 
      return false; 
     } catch (IOException e) { 
      CreateLog.addToLog(e.toString()); 
      return false; 
     } 
    } 

public static void createFolder(String filePath) { 
    File createFolder = new File(filePath); 
    createFolder.mkdirs(); 
} 

的清潔器的方法是使用一個Asynctask,代碼在一個新的線程中運行。但編碼有點困難。

private class GetProblems extends AsyncTask<String, Integer, String> { 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
     } 

     @Override 
     protected String doInBackground(String... params) { 
      for (String myUrl : params) { 

       try { 

        URL url = new URL(myUrl); 
        URLConnection ucon = url.openConnection(); 
        ucon.setRequestProperty("Accept", "application/xml"); 

        InputStream is = ucon.getInputStream(); 
        BufferedInputStream bis = new BufferedInputStream(is); 

        ByteArrayBuffer baf = new ByteArrayBuffer(50); 
        int current = 0; 
        while ((current = bis.read()) != -1) { 
         baf.append((byte) current); 
        } 
        String str = new String(baf.toByteArray(), "UTF8"); 

        return str; 

       } catch (MalformedURLException e) { 
        CreateLog.addToLog("[GetProblems] " + e.toString()); 
       } catch (IOException e) { 
        CreateLog.addToLog("[GetProblems] " + e.toString()); 
       } 
      } 
      return "error"; 
     } 

     @Override 
     protected void onProgressUpdate(Integer... values) { 
      super.onProgressUpdate(values); 
      // updateProgressBar(values[0]); 
     } 

     @Override 
     protected void onPostExecute(String result) { 
      super.onPostExecute(result); 

         ...write result to a file 

     } 
    } 

運行的AsyncTask代碼:

new GetProblems().execute("http://myurl.com/xmlfile.xml"); 
相關問題