2014-09-20 3 views
0

내 안드로이드 응용 프로그램에서 나는 song.User의 목록을 가지고 있습니다. 하지만 내 문제는 HTTP 요청을 사용하여 파일을 다운로드 할 때 콘텐츠 길이 = 0 또는 -1을 반환하므로 파일을 다운로드 할 수 없습니다. 브라우저에서 동일한 URL을 사용하면 노래가 완전히 다운로드됩니다. 노래 파일을 다운로드하는 내 코드입니다 -http 요청을 통한 파일 다운로드가 실패했습니다.

URL url = new URL(mUrl); 
       HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
       connection.setRequestMethod("GET"); 
       connection.setDoOutput(true); 
       connection.setConnectTimeout(TimeOut); 
       connection.setReadTimeout(TimeOut); 
       connection.connect(); 
       int lenghtOfFile = connection.getContentLength(); 

및 파일 길이는 0 또는 -1입니다. 내 코드의 문제점.

미리 감사드립니다.

+0

노래 파일의 확장자는 무엇 주석 진행 상황을 업데이트하는 방법? –

+0

서버가 해당 정보를 보내지 않았습니다. 스트림을 열고 read()를 시작하기 만하면됩니다. – greenapps

+0

@ Nadir 나는 aac.m4a, avf.mp3와 같은 다른 파일 확장자를 가지고있다. – Ravi

답변

0

다운로드 또는 업로드가 당신의 UI에서 다운로드 작업을 분할하기 위해 AsycTask을 사용하는 것입니다 처리 여부 HTTP 요청을 실행하는 가장 좋은 방법은,

시도하는 방법이 코드를 넣어 파일을 다운로드하여 호출 당신은 AsyncTask를를 사용하는 경우, 당신은 아래에 주어진 코드

에서이 진행의에서는 ProgressBar를 추가하고 업데이트 할 수 있습니다

updateProgress(downloadedSize,totalSize); 

    try { 
     //set the download URL, a url that points to a file on the internet 
     //this is the file to be downloaded 
     URL url = new URL("File Url"); 

     //create the new connection 
     HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 

     //set up some things on the connection 
     urlConnection.setRequestMethod("GET"); 
     urlConnection.setDoOutput(true); 

     //connect! 
     urlConnection.connect(); 

     //set the path where we want to save the file 
     //in this case, going to save it on the root directory of the 
     //sd card. 
     File SDCardRoot = Environment.getExternalStorageDirectory(); 
     //create a new file, specifying the path, and the filename 
     //which we want to save the file as. 
     File file = new File(SDCardRoot,"song.extension"); 

     //this will be used to write the downloaded data into the file we created 
     FileOutputStream fileOutput = new FileOutputStream(file); 

     //this will be used in reading the data from the internet 
     InputStream inputStream = urlConnection.getInputStream(); 

     //this is the total size of the file 
     int totalSize = urlConnection.getContentLength(); 
     //variable to store total downloaded bytes 
     int downloadedSize = 0; 

     //create a buffer... 
     byte[] buffer = new byte[1024]; 
     int bufferLength = 0; //used to store a temporary size of the buffer 

     //now, read through the input buffer and write the contents to the file 
     while ((bufferLength = inputStream.read(buffer)) > 0) { 
       //add the data in the buffer to the file in the file output stream (the file on the sd card 
       fileOutput.write(buffer, 0, bufferLength); 
       //add up the size so we know how much is downloaded 
       downloadedSize += bufferLength; 
       //this is where you would do something to report the prgress, like this maybe 
       //updateProgress(downloadedSize, totalSize); if your run this code from AsyncTask 

     } 
     //close the output stream when done 
     fileOutput.close(); 

//catch some possible errors... 
} catch (MalformedURLException e) { 
     e.printStackTrace(); 
} catch (IOException e) { 
     e.printStackTrace(); 
} 
+0

답장을 보내 주지만 코드를 사용할 때 bufferLength -1에 줄을 표시한다. (while (bufferLength = input.read (buffer))> 0) { – Ravi

+0

귀하의 링크를 보내주십시오. –

관련 문제