- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 AsyncTask 和 arrayList 制作一个多下载器。我希望我的 Android 应用程序在我的应用程序后台下载视频。这就是为什么我创建了一个应用程序类并在那里初始化了我的下载数组列表。我的下载 ListView 完美地添加了新项目,但是当添加新项目时,前一个项目(无论是完全下载还是部分下载)都会开始再次下载。
这是我的应用程序类:
public class GlobalDownload extends Application {
private List<DownloadInfo> downloadinfo;
@Override
public void onCreate() {
super.onCreate();
downloadinfo = new ArrayList<DownloadInfo>();
}
public List<DownloadInfo> getDownloadInfo(){
return downloadinfo;
}
public String getDownloadStates()
{
return state;
}
}
这是我的类,其中 ListView 正在填充:
public class DownloadScreen extends Activity implements {
ListView listView;
Animation animationslidedown;
Animation animationslideup;
TextView textView2;
ImageView menu;
ImageView menuicon1;
String text="";
List<DownloadInfo> downloadInfo;
static final int REQUEST = 1;
public static String f_type;
public static Integer result;
DownloadInfoArrayAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.download_layout);
listView = (ListView) findViewById(R.id.downloadListView);
String file_name=getIntent().getStringExtra("FILE_NAME");
String file_type=getIntent().getStringExtra("FILE_TYPE").toString();
Log.e("file_type", "" + file_type);
if(file_type.equals("video/mp4"))
{
f_type="mp4";
}
else if(file_type.equals("video/webm"))
{
f_type="webm";
}
else if(file_type.equals("video/x-flv"))
{
f_type="flv";
}
else if(file_type.equals("video/3gpp"))
{
f_type="3gpp";
}
GlobalDownload downloadList = ((GlobalDownload)getApplicationContext());
ArrayList downloadState = (ArrayList) downloadList.getDownloadInfo();
Log.e("NAME", "" + file_name);
String file_url=getIntent().getStringExtra("FILE_URL");
Log.e("URL", "" + file_url);
String file_size=getIntent().getStringExtra("FILE_SIZE");
Log.e("SIZE", "" + file_size);
Log.e("TYPE", file_type.toString());
downloadState.add(new DownloadInfo(file_name,file_url,file_size,f_type.toString()));
listView.setAdapter(new DownloadInfoArrayAdapter(getApplicationContext(), R.id.downloadListView, downloadState));
}
}
这是我的 AsyncTask Activity 和 ArrayAdapeter Activity :
public class FileDownloadTask extends AsyncTask<String, Integer, Integer> {
// private static final String TAG = FileDownloadTask.class.getSimpleName();
final DownloadInfo mInfo;
TextView display;
public int progress;
public String encodedurl;
DownloadInfoArrayAdapter mAdapter;
public FileDownloadTask(DownloadInfo info) {
mInfo = info;
}
@Override
protected void onProgressUpdate(Integer... values) {
mInfo.setProgress(values[0]);
mInfo.setFilePercent(values[0]);
ProgressBar bar = mInfo.getProgressBar();
if (bar != null) {
bar.setProgress(mInfo.getProgress());
}
}
@Override
protected Integer doInBackground(String... params) {
int count;
if(mInfo.getDownloadState()!= DownloadInfo.DownloadState.COMPLETE)
{
try {
String root = Environment.getExternalStorageDirectory().toString();
System.out.println("Downloading");
//
URL url = new URL(mInfo.getFileUrl().toString());
Log.e("URL", "" + url);
HttpURLConnection conection = (HttpURLConnection) url.openConnection();
conection.connect();
Log.e("connection", " " + 0);
int lenghtOfFile = conection.getContentLength();
Log.e("length", "" + lenghtOfFile);
//input stream to read file - with 8k buffer
// Output stream to write file
File rootdirectory = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES), "Youtube Videos");
if (!rootdirectory.exists()) {
rootdirectory.mkdirs();
}
String nameoffile = mInfo.getFilename() + "." + mInfo.getFileType();
File file = new File(rootdirectory, nameoffile);
file.createNewFile();
Log.e("name of file", "" + nameoffile);
mInfo.setDownloadState(DownloadInfo.DownloadState.DOWNLOADING);
InputStream input = new BufferedInputStream(url.openStream(), 8192);
OutputStream output = new FileOutputStream(file);
byte data[] = new byte[1024];
long total = 0;
while ((count = input.read(data)) != -1) {
total += count;
progress = (int) ((total * 100) / lenghtOfFile);
publishProgress(progress);
Log.e("PROGRESS", "" + mInfo.getFileType() + progress);
mInfo.setFilePercent(progress);
// writing data to file
output.write(data, 0, count);
}
// flushing output
output.flush();
// closing streams
output.close();
input.close();
Log.e("Download Complete", "" + 0);
} catch (Exception e) {
Log.e("Error: ", e.getMessage());
}
mInfo.setDownloadState(DownloadInfo.DownloadState.COMPLETE);
}
return progress;
}
protected void onPostExecute(Integer progress) {
mInfo.setDownloadState(DownloadInfo.DownloadState.COMPLETE);
}
@Override
protected void onPreExecute() {
mInfo.setDownloadState(DownloadInfo.DownloadState.DOWNLOADING);
}
}
这是我的适配器类,从中调用 AsyncTask
public class DownloadInfoArrayAdapter extends ArrayAdapter<DownloadInfo> {
public static TextView progpercent;
public static Integer result;
private static class ViewHolder {
TextView textView;
ProgressBar progressBar;
Button button;
DownloadInfo info;
TextView size;
TextView prog;
public TextView progpercent;
}
private static final String TAG = DownloadInfoArrayAdapter.class.getSimpleName();
public DownloadInfoArrayAdapter(Context context, int textViewResourceId,
List<DownloadInfo> objects) {
super(context, textViewResourceId, objects);
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View row = convertView;
final DownloadInfo info = getItem(position);
ViewHolder holder = null;
if(null == row) {
LayoutInflater inflater = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.file_download_row, parent, false);
holder = new ViewHolder();
holder.textView = (TextView) row.findViewById(R.id.downloadFileName);
holder.progressBar = (ProgressBar) row.findViewById(R.id.downloadProgressBar);
holder.size=(TextView) row.findViewById(R.id.downloadFileSize);
holder.progpercent=(TextView) row.findViewById(R.id.downloadFileProgress);
row.setTag(holder);
} else {
holder = (ViewHolder) row.getTag();
}
holder.textView.setText(info.getFilename());
holder.progressBar.setProgress(info.getProgress());
holder.progressBar.setMax(100);
holder.size.setText(info.getFileSize());
info.setProgressBar(holder.progressBar);
info.setDownloadState(DownloadInfo.DownloadState.QUEUED);
FileDownloadTask task = new FileDownloadTask(info);
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
return row;
}
}
这是我的 Activity 列表
public class DownloadInfo
{
private final static String TAG = DownloadInfo.class.getSimpleName();
public enum DownloadState {
NOT_STARTED,
QUEUED,
DOWNLOADING,
COMPLETE
}
private volatile DownloadState mDownloadState = DownloadState.NOT_STARTED;
private String mFilename;
private String mFileSize;
private String mFileUrl="";
private volatile Integer mProgress;
private volatile ProgressBar mProgressBar;
private Integer mFilePercent;
private String mFileType;
private Integer mSize;
public DownloadInfo(String filename, String FileUrl, String size, String type) {
mFilename = filename;
mProgress = 0;
mFileUrl = FileUrl;
mFilePercent=0;
mSize = 0;
mFileType= type;
mFileSize = size;
mProgressBar = null;
}
public ProgressBar getProgressBar() {
return mProgressBar;
}
public void setProgressBar(ProgressBar progressBar) {
Log.d(TAG, "setProgressBar " + mFilename + " to " + progressBar);
mProgressBar = progressBar;
}
public void setDownloadState(DownloadState state) {
mDownloadState = state;
}
public DownloadState getDownloadState() {
return mDownloadState;
}
public Integer getProgress() {
return mProgress;
}
public void setProgress(Integer progress) {
this.mProgress = progress;
}
public String getFileType() {
return mFileType;
}
public void setFileType(String FileType) {
mFileType = FileType;
}
public Integer getSize() {
return mSize;
}
public void setSize(Integer FSize) {
mSize = FSize;
}
public String getFileSize() {
return mFileSize;
}
public void setFileSize(String FileSize) {
mFileSize = FileSize;
}
public Integer getFilePercent() {
return mFilePercent;
}
public void setFilePercent(Integer FilePercent) {
mFilePercent = FilePercent;
}
public String getFilename() {
return mFilename;
}
public String getFileUrl()
{
return mFileUrl;
}
}
请帮忙!
最佳答案
在您设置的适配器类中:
info.setDownloadState(DownloadInfo.DownloadState.QUEUED);
这意味着在下一次 getView 调用时,即使之前已下载过该文件,您也将运行该文件的下载,因为您重置了状态。
您可以检查适配器中的状态,而不是 AsyncTask 中的状态。
关于java - 下载在 ListView 中重新开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36292888/
当我尝试通过我的 .exe 文件从 url 下载 .pdf 文件时出现以下错误。 The server committed a protocol violation. Section=Response
我是一家非营利组织的 G Suite 管理员,刚刚发现数据导出功能,这似乎是个人帐户的外卖。 导出文件已准备好,现在可以从 Google Cloud Platform Storage 中的存储桶下载。
导航 引言 总体思路 七牛云相关的配置文件 获取七牛云上传token 相关类定义 核心代码实现 获取七牛云图片下载链接 公开空
这不是后端编程问题。我只能修改标记或脚本(或文档本身)。我在这里问的原因是因为我对适当术语的所有搜索都不可避免地导致有关编程此功能的问题和解决方案。我不是试图通过编程来强制它;我必须找出此 PDF 行
您好,我已在 Google AdSense 中注册,我想使用适用于 iOS 的 SDK,但目前我找不到 SDK 下载链接。 我的申请已获批准。 任何人都知道如何下载这个sdk。 我使用这个链接来描述如
我需要为当前在 SourceForge 上的 github 项目提供二进制文件和文档。在那里,我可以为我需要的下载提供一个目录结构,因为我必须为大约 10 个不同的操作系统提供几个版本。 github
我从 Canvas 下载绘图时遇到问题。这是我的代码: function downloadCanvas(link, canvasId, filename) { link.href =
ASP.NET 项目 我将使用 Azure 进行存储。问题(要求): 在我的项目中,我让注册用户下载文件。但我不希望用户将此下载链接分享给未注册的人(例如:我给注册用户的下载链接只能在他们的计算机上下
我编写了一个servlet,用于检查http header ,但我不知道为什么当页面加载时,它会自动开始下载。 /* * To change this template, choose To
我正在尝试将下载添加到我的网络浏览器,但遇到的问题是获取您尝试下载的文件的名称。这是我的下载代码: engine.locationProperty().addListener(new ChangeLi
我正在尝试下载网站的 html: String encoding = "UTF-8"; HttpContext localContext = new BasicHttpContext();
我制作了一个带有“开始下载”按钮的框架,用于从网站下载 JAR。 问题是每当我点击开始下载按钮时,整个框架就会卡住,直到下载完成,然后就正常了。 我该如何解决这个问题? 这是单击按钮时执行的代码 p
我得到这段代码来实现一些东西,它可以帮助我从给定的 URL 下载文件。 -(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSes
我正在尝试创建一个 Controller 来使用流方法下载和上传文件,在我的例子中,所有文件都作为 Blob 保存在数据库中。我阅读了 Jboss Netty 的文档,但我认为这不是我的最佳解决方案。
下载并保存文件 let destination: DownloadRequest.DownloadFileDestination = { _, _ in // var fileURL = sel
使用 htaccess 我基本上试图禁止访问该页面,即 http://example.com , 但它仍然允许人们下载文件,如果他们有直接链接即 http://example.com/hi.zip .
我正在寻求将脚本与我的控制面板集成,并且由于我是新手脚本编写者而遇到问题。我想做的是用 1 个脚本下载一个文件并解压它。 示例: wget http://example.com/example.tar
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
这个问题在这里已经有了答案: Top techniques to avoid 'data scraping' from a website database (14 个答案) 关闭 5 年前。 我有
这个问题在这里已经有了答案: Reading and parsing email from Gmail using C#, C++ or Python (6 个答案) 关闭 7 年前。 我只是想,是
我是一名优秀的程序员,十分优秀!