java - Android:100+ KB 的文件下载变成 1 KB

标签 java android xml download

我能够解析 xml 文件,并且我想下载 xml 给出的 url 的文件。我有以下代码:

    try{
        /* Create a URL we want to load some xml-data from. */
        URL url = new URL("http://dev2.eacomm.com/tabletcms/tablets/sync_login/jayem30/jayem");
        url.openConnection();
        /* Get a SAXParser from the SAXPArserFactory. */
        SAXParserFactory spf = SAXParserFactory.newInstance();
        SAXParser sp = spf.newSAXParser();

        /* Get the XMLReader of the SAXParser we created. */
        XMLReader xr = sp.getXMLReader();
        /* Create a new ContentHandler and apply it to the XML-Reader*/
        ExampleHandler myExampleHandler = new ExampleHandler();
        xr.setContentHandler(myExampleHandler);

        /* Parse the xml-data from our URL. */
        xr.parse(new InputSource(url.openStream()));
        /* Parsing has finished. */

        /* Our ExampleHandler now provides the parsed data to us. */
        List<ParsedExampleDataSet> parsedExampleDataSet = myExampleHandler.getParsedData();

        Iterator i;
        i = parsedExampleDataSet.iterator();
        ParsedExampleDataSet dataItem;

        while(i.hasNext()){
                dataItem = (ParsedExampleDataSet) i.next();
                String folder = dataItem.getParentTag();

                if( folder == "Videos"  ){

                    String [] videoName = dataItem.getName().split("/");
                    String currentFile = videoName[0] + "." + videoName[1];
                    String currentFileURL = dataItem.getUrl() + videoName[0] + "." + videoName[1];
                    tv.append("\nURL: " + currentFileURL);


                    new DownloadFileAsync().execute(currentFile , currentFileURL, "Videos");
                    this.videoCount++;
                    tv.append("\nVideo Count: " + this.videoCount );
                }

                if( folder == "Slideshows" ){
                    //processSlideshows(dataItem, folder);   
                }      
        }

    }catch(Exception e){
        Toast.makeText(getBaseContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
    }

下载代码位于异步任务上。然而,当我运行这个时,我应该下载的两个文件(126kb 和 98kb)被下载,文件在那里,但它们的大小都只有 1kb。该文件无法播放。

当我改变线路时

**new DownloadFileAsync().execute(currentFile , currentFileURL, "Videos");** 
to 
**new DownloadFileAsync().execute("hehe.flv", "http://dev2.eacomm.com/tabletcms/app/webroot/files/000002/videos/27.flv", "Videos");**

文件大小很好,但它只返回一个文件。

编辑:

//---------------------------- START DownloadFileAsync -----------------------//
class DownloadFileAsync extends AsyncTask<String, String, String>{

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        showDialog(DIALOG_DOWNLOAD_PROGRESS);
    }

    @Override
    protected String doInBackground(String... strings) {

        try {
            String currentFile = strings[0];
            String currentFileURL = strings[1];
            String folder = strings[2];

            File root = Environment.getExternalStorageDirectory();
            URL u = new URL(currentFileURL);
            HttpURLConnection c = (HttpURLConnection) u.openConnection();
            c.setRequestMethod("GET");
            c.setDoOutput(true);
            c.connect();

            int lenghtOfFile = c.getContentLength();

            FileOutputStream f = new FileOutputStream(new File(root + "/Engagia/Downloads/" + folder, currentFile));

            InputStream in = c.getInputStream();

            byte[] buffer = new byte[1024];
            int len1 = 0;
            long total = 0;

            while ((len1 = in.read(buffer)) > 0) {
                total += len1; //total = total + len1
                publishProgress("" + (int)((total*100)/lenghtOfFile));
                f.write(buffer, 0, len1);
            }
            f.close();
        }catch (Exception e){
            Log.d("Downloader", e.getMessage());
        }
        return null;
    }

    protected void onProgressUpdate(String... progress) {
        Log.d("ANDRO_ASYNC",progress[0]);
        mProgressDialog.setProgress(Integer.parseInt(progress[0]));
    }

    @Override
    protected void onPostExecute(String unused) {
        dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
    }

}
//---------------------------- END DownloadFileAsync -----------------------//

@Override
protected Dialog onCreateDialog(int id) {
    switch (id) {
        case DIALOG_DOWNLOAD_PROGRESS:
            mProgressDialog = new ProgressDialog(this);
            mProgressDialog.setMessage("Downloading files...");
            mProgressDialog.setIndeterminate(false);
            mProgressDialog.setMax(100);
            mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            mProgressDialog.setCancelable(true);
            mProgressDialog.show();
            return mProgressDialog;
        default:
            return null;
    }

}

编辑:(感谢偶然)

我的错,我重新检查了我的 URL,发现我的 XML 流没有返回正确的下载 URL,因此我必须重建一个下载 URL。我做了类似的事情:

tv.append("\nCurrent File URL: " + currentFileURL);
String downloadFileURL = currentFileURL.replace( "tablets/tablet_content", "app/webroot/files" );

最佳答案

确保您的网址格式正确。您是否确认 currentFilecurrentFileURL 均正确?

关于java - Android:100+ KB 的文件下载变成 1 KB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6138911/

相关文章:

java - 使用 Spring @RestController 和 @QuerydslPredicate 来处理 GET With ZonedDateTime 参数

c# - 通过递归动态地使用 XElement 构建 Xml

python - 使用 Python 将 xml w/xsd 解析为 CSV?

iphone - 蓝牙跨平台 android, iphone, Blackberry, Symbian, WinMo

java - 将同名 xml 节点添加到 arrayList

java - 无法在Debian上安装默认的jdk包

java - 用java替换字符串中文本的最佳方法

java - 服务器返回 HTTP 响应代码 : 403 for URL: Iam displaying webpage on JEditorPane

java - Android OpenGL ES 2.0,为每个三角形计算法线

Android 安全 - 使用 pin 存储敏感信息的密码学