2015-02-10 116 views
0

我試圖在Android中使用HttpURLConnection從URL下載文件。如何在Android中使用http從服務器下載文件

首先,我以編程方式添加textviews,併爲每個textviews設置一個偵聽器以下載文件。 以下是該代碼。

for(Element ele: elements){ 
      final TextView attachItem = new TextView(this); 
      attachItem.setText("myStr"); 
      attachItem.setTag("myStr2"); 

      LinearLayout.LayoutParams llp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
      attachItem.setLayoutParams(llp); 

      ll.addView(attachItem, i++); 

      // set a listener to textview 
      attachItem.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        // when clicked, execute class that extends `AsyncTask` 
        new downloadAttach(). 
          execute(attachItem.getTag().toString(), attachItem.getText().toString()); 
       } 
      }); 
     } 

downloadAttach()使用http協議從服務器下載文件。以下是代碼。

 HttpURLConnection con = (HttpURLConnection)(new URL("MyUrl")).openConnection(); 
     con.setRequestMethod("POST"); 
     ... 
     ... 
     ... 
     con.setRequestProperty("Cookie", "myCookie"); 
     con.setDoInput(true); 
     con.setDoOutput(true); 

     DataOutputStream output = new DataOutputStream(con.getOutputStream()); 
     output.writeBytes("myQuery"); 
     output.close(); 

     InputStream is = con.getInputStream(); 

     FileOutputStream fos = new FileOutputStream(new File(Environment.getDataDirectory(), "fileName")); 
     // In my case, getDataDirectory() returns "/data" 

     byte[] buffer = new byte[1024]; 
     int len; 

     while ((len = is.read(buffer)) > 0) { 
      fos.write(buffer, 0, len); 
     } 

     is.close(); 
     fos.close(); 

但是,當我點擊一個textview,沒有任何改變。我手機中的/data目錄中沒有文件。

有什麼問題?有人請幫忙。

回答

0

想要下載SD卡中的文件嗎?如果是嘗試在您更改爲

Environment.getExternalStorageDirectory() + filename 

或 路徑的應用程序包目錄使用"/data/packagename/" + filename

+0

下載路徑並不重要。我只是想下載... – soonoo 2015-02-10 05:21:18

+0

我認爲你應該先添加日誌來檢查參數是否傳輸到downloadTask是否正確,然後如果下載正常發生。 – 2015-02-10 05:42:19

+0

@ChineGary我認爲參數傳輸正確。我如何檢查下載是否正常?沒有任何例外... – soonoo 2015-02-10 05:56:38

0

您需要撥打#connect,否則請求永遠不會發生。

con.setDoInput(true); 
con.setDoOutput(true); 

con.connect(); 

DataOutputStream output = new DataOutputStream(con.getOutputStream()); 
+0

好..我用上面的代碼來獲取HTML之前,它工作正常... – soonoo 2015-02-10 05:50:41

+0

我一直使用'#connect'方法,但似乎調用'#getOutputStream'或'#getInputStream' [隱式調用它](http://stackoverflow.com/a/18742082/1047268)。 – 2015-02-10 05:58:23

相關問題