2015-02-10 112 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

相关问题