2013-04-24 44 views

回答

1

AsyncTask,后台任务将xml保存在本地内存

    int count; 
        try { 
         URL url = new URL("http://sample.com/test"); 
         URLConnection conection = url.openConnection(); 
         conection.connect(); 
         // getting file length 
         int lenghtOfFile = conection.getContentLength(); 
         // input stream to read file - with 8k buffer 
         InputStream input = new BufferedInputStream(url.openStream(), 8192); 
         // Output stream to write file 
         OutputStream output = new FileOutputStream("/data/data/com.pc.demo/temp.xml"); 
         byte data[] = new byte[1024]; 
         long total = 0; 
         while ((count = input.read(data)) != -1) { 
          total += count; 
          int progress = (int)((total*100)/lenghtOfFile) ; 
          System.out.println("update---"+progress); 
          publishProgress(progress); 
          output.write(data, 0, count); 
         } 

         // flushing output 
         output.flush(); 
         // closing streams 
         output.close(); 
         input.close(); 

        } catch (Exception e) { 
         Log.e("Error: ", e.getMessage()); 
        } 

onPostExecute

 File yourFile = new File("/data/data/com.pc.demo/temp.xml"); 
    InputStream input = new BufferedInputStream(new FileInputStream(yourFile), 8086); 

onProgressUpdate

setProgressPercent(progress[0]) 
+1

+1自我回答 – 2013-04-29 08:35:52

0

您可以覆盖你的AsyncTask的onProgressUpdate()函数,并在doInBackgroud使用publishProgress(进展...值)( )把你的保存状态推到进度然后更新它,这里是我简单的代码,愿望可以帮助你。

private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> { 
protected Long doInBackground(URL... urls) { 
    int count = urls.length; 
    long totalSize = 0; 
    for (int i = 0; i < count; i++) { 
     totalSize += Downloader.downloadFile(urls[i]); 
     publishProgress((int) ((i/(float) count) * 100)); 
     // Escape early if cancel() is called 
     if (isCancelled()) break; 
    } 
    return totalSize; 
} 

protected void onProgressUpdate(Integer... progress) { 
    setProgressPercent(progress[0]); //change this with your progress bar 
} 

protected void onPostExecute(Long result) { 
    showDialog("Downloaded " + result + " bytes"); 
} 

}

+0

谢谢,我已经更新了答案 – 2013-04-25 05:51:07

相关问题