2017-11-07 26 views
0

xls 파일을 다운로드해야하는 URL이 있습니다. 인코딩 된 데이터를 게시하고 응답은 xls 파일이됩니다. 하지만이 xls 파일을 내 외부 저장소로 다운로드하는 방법을 잘 모르겠습니다. 내가 네트워크 호출을 실행하면 나는 java.io.FileNotFoundExceptionURL에서 파일을 다운로드하는 중 예외 파일을 찾을 수 없습니다.

을 가지고 있으며

Attempt to invoke virtual method 'void java.io.BufferedReader.close()' on a null object reference

내가 어떻게 파일로 응답을 얻을하는 생각이 없다고 말했습니다. 여기 내 코드가있다.

try{ 
     // TODO Auto-generated method stub 
     String data=URLEncoder.encode("job_id","UTF-8") 
       +"="+URLEncoder.encode(String.valueOf(responseText),"UTF-8"); 
     data+="&"+URLEncoder.encode("m_id","UTF-8")+"=" 
       +URLEncoder.encode(logedinUserId,"UTF-8"); 
     data+="&"+URLEncoder.encode("start","UTF-8")+"=" 
       +URLEncoder.encode(start,"UTF-8"); 
     data+="&"+URLEncoder.encode("end","UTF-8")+"=" 
       +URLEncoder.encode(endDate,"UTF-8"); 

     Log.e("data",""+data); 

     String text=""; 
     BufferedReader reader=null; 

     // Send data 
     try{ 

      // Defined URL where to send data 
      URL url=new URL("url here"); 

      // Send POST data request 

      URLConnection conn=url.openConnection(); 
      conn.setDoOutput(true); 
      OutputStreamWriter wr=new OutputStreamWriter(conn.getOutputStream()); 
      wr.write(data); 
      wr.flush(); 

      // Get the server response 

      reader=new BufferedReader(new InputStreamReader(conn.getInputStream())); 
      StringBuilder sb=new StringBuilder(); 
      String line=null; 

      // Read Server Response 
      while((line=reader.readLine())!=null){ 
       // Append server response in string 
       sb.append(line+"\n"); 
      } 


      text=sb.toString(); 
     }catch(Exception ex) 

     { 
      ex.printStackTrace(); 
     }finally{ 
      try{ 
       reader.close(); 
      }catch(Exception ex){ 
       ex.printStackTrace(); 

      } 
     } 

     Log.e("response x",""+text); 


    }catch(UnsupportedEncodingException e){ 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 
+0

코드를 디버깅하셨습니까? 어쩌면 귀하의 URL이 아무것도 반환하지 않으며 그 이유는 당신이 파일을 찾을 수 없거나 null 예외입니까? – Umair

+0

예. 나는 우편 배달부와 그것을 테스트했습니다. – Bivin

+0

URL이 잘 작동하도록 하시겠습니까? 파일이 있나요? – Umair

답변

0

확인 먼저 당신은 그래서 당신의 UI 스레드가 차단됩니다하지 않는 AsyncTask를에 다운로드하는 과정을 넣어해야합니다. 그런 다음이 코드를 실행하면 파일을 다운로드하는 데 도움이됩니다.

private class FetchFileURlFromServer extends AsyncTask<String, String, String> { 

    /** 
    * Before starting background thread 
    * Show Progress Bar Dialog 
    */ 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     onCreateDialog(progress_bar_type); 
    } 

    /** 
    * Downloading file in background thread 
    */ 
    @SuppressWarnings("ResultOfMethodCallIgnored") 
    @Override 
    protected String doInBackground(String... f_url) { 
     String path = ""; 
     int responseCode = 0; 
     StringBuilder response = null; 
     try { 
      if (f_url[0] != null && !f_url[0].equals("")) 
       f_url[0] = f_url[0].replace("your url"); 


      URL obj = new URL(f_url[0]); 
      HttpURLConnection con = (HttpURLConnection) 
        obj.openConnection(); 
      con.setRequestMethod("GET"); 
      con.setDoOutput(true); 

      BufferedReader in = new BufferedReader(new 
      InputStreamReader(con.getInputStream())); 
      String inputLine; 
      response = new StringBuilder(); 

      while ((inputLine = in.readLine()) != null) { 
       response.append(inputLine); 
      } 
      in.close(); 

      System.out.println("Response : -- " + response.toString()); 

      //    path = connection.getInputStream().toString(); 

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

     return response != null ? response.toString() : null; 
//   return path; 
    } 

    /** 
    * Updating progress bar 
    */ 
    protected void onProgressUpdate(String... progress) { 
     // setting progress percentage 
     progressDialogForDownload.setProgress(Integer.parseInt(progress[0])); 
    } 

    /** 
    * After completing background task 
    * Dismiss the progress dialog 
    **/ 

    @Override 
    protected void onPostExecute(String fileURL) { 
     // dismiss the dialog after the file was downloaded 
     if (progressDialogForDownload.isShowing() && progressDialogForDownload != null) { 
      progressDialogForDownload.dismiss(); 
      progressDialogForDownload = null; 
     } 

     // you can open your file using intents or whatever you want to use. 
      startActivity(browserIntent); 
      Log.d("", "onButtonClickView: " + fileURL); 
     } 

    } 
} 

희망이 있습니다.