如何在Android中使用http从服务器下载文件

时间:2015-02-10 05:05:51

标签: android httpurlconnection

我尝试使用Android中的HttpURLConnection从网址下载文件。

首先,我以编程方式添加了textview,并为每个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();

但是当我点击文本视图时,没有任何变化。我手机中的/data目录中没有文件。

问题是什么?有人请帮忙。

2 个答案:

答案 0 :(得分:0)

您想在SD卡中下载文件吗?如果是,请尝试将路径更改为

Environment.getExternalStorageDirectory() + filename 

或 在您的应用包目录中使用"/data/packagename/" + filename

答案 1 :(得分:0)

您需要致电#connect,否则请求永远不会发出。

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

con.connect();

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