Android:下载文件超过100 KB变为1 KB

如何解决Android:下载文件超过100 KB变为1 KB

|| 我能够解析一个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,\"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,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;
    }

}
编辑:(由于Haphazard) 不好,我重新检查了URL,发现我的XML流没有返回正确的URL以供下载,因此我不得不重建URL以供下载。我做了类似的事情:
tv.append(\"\\nCurrent File URL: \" + currentFileURL);
String downloadFileURL = currentFileURL.replace( \"tablets/tablet_content\",\"app/webroot/files\" );
    

解决方法

确保您的网址格式正确。您确认confirmed4ѭ和
currentFileURL
都正确吗?     ,您可以发布异步任务中的代码吗?我觉得问题出在从URL下载文件。 请参阅以下网址以获取如何下载文件。 ANDROID:如何将视频文件下载到SD卡? 谢谢 迪帕克     ,请尝试以下代码。
package com.endeavour.sampleprograms;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;

import org.apache.http.util.ByteArrayBuffer;

import android.os.AsyncTask;
import android.os.Environment;

class DownloadFileAsync extends AsyncTask<String,String,String>{

    private static final String DIALOG_DOWNLOAD_PROGRESS = null;
    @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];
*emphasized text*
            String fileName = Environment.getExternalStorageDirectory() + \"/Engagia/Downloads/\" + folder+\"/\";
            File wallpaperDirectory = new File(fileName);
            if (!wallpaperDirectory.exists())
                wallpaperDirectory.mkdirs();
            fileName = fileName+currentFile;
            downloadFromUrl(currentFileURL,fileName);
            //            FileOutputStream f = new FileOutputStream(new File(root + \"/Engagia/Downloads/\" + folder,currentFile));

        }catch (Exception e){

        }
        return null;
    }


    public void downloadFromUrl(String VideoURL,String fileName) {  //this is the downloader method
        try {
            System.out.println(\"....Url.....\"+VideoURL);
                URL url = new URL(VideoURL); //you can write here any link
                File file = new File(fileName);

                long startTime = System.currentTimeMillis();
                              /* Open a connection to that URL. */
                URLConnection ucon = url.openConnection();

                /*
                 * Define InputStreams to read from the URLConnection.
                 */
                InputStream is = ucon.getInputStream();
                BufferedInputStream bis = new BufferedInputStream(is);

                /*
                 * Read bytes to the Buffer until there is nothing more to read(-1).
                 */
                ByteArrayBuffer baf = new ByteArrayBuffer(50);
                int current = 0;
                while ((current = bis.read()) != -1) {
                        baf.append((byte) current);
                }

                /* Convert the Bytes read to a String. */
                FileOutputStream fos = new FileOutputStream(file);
                fos.write(baf.toByteArray());
                fos.close();


        } catch (IOException e) {
               e.printStackTrace();
        }
    }




}
谢谢Deepak     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-