- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 parse.com
Android SDK 来管理我的应用程序中的一些图像。 cancel()
是停止与 parse.com
服务器交易的唯一方法吗?
最小的例子:
final ParseFile file = ... ;
file.getDataInBackground(new GetDataCallback() {
//called when loading is done
@Override
public void done(byte[] bytes, ParseException e) {
Log.e(TAG, String.valueOf(bytes == null));
}
}, new ProgressCallback() {
//called to notify progress
@Override
public void done(Integer integer) {
Log.e(TAG, String.valueOf(integer));
if (integer > 50) {
file.cancel();
}
}
});
我希望在达到 50% 后加载停止,但事实并非如此。我在这种情况下的日志是:
1
2
3
....
49
50
51
....
98
99
100
true
调用 cancel()
和不调用的唯一区别在于,如果取消 byte[]
结果为 null。但这真的是次要的,这里的重点是 file
不断消耗带宽,而且与 future 的下载重叠,从而减慢速度。
有什么方法可以真正停止加载 ParseFile 吗?您是否看到任何解决方法,例如停止其线程?也许使用底层 bolt 框架的东西?使用我自己的异步任务?
示例:continueWhile()
方法可能有用,但我不知道如何使用它。
我想知道否决票的原因,也许是共同的标题?这正是我遇到的情况:ParseFile.cancel() 不工作。根据官方docs,它应该.
评论建议我应该简单地调用break
。虽然我认为它行不通,但我可能会澄清,我发布的代码只是一个提供上下文和问题的最小、简洁的工作示例。我不想从进度回调中cancel()
事务;我想从任何地方调用 parseFile.cancel()
。我放入进度回调以表明,虽然它应该停止,但它没有。
编辑 这是我真正想要做的。我尝试了不同的方法,但仅此而已。
ParseFile currentFile;
public void setFile(ParseFile file) {
if (currentFile != null) {
currentFile.cancel();
}
currentFile = file;
currentFile.getDataInBackground(new GetDataCallback() {
...
}, new ProgressCallback() {
... // logs
});
}
有了这样的代码,比如说,要下载两个大图像,事情会变成这样:
//calling setFile(file1)
1
2
3
...
20
21
22
//calling setFile(file2), thus also calling file1.cancel()
1
2
23 //file1 going on!
3
24
4
25
... //things get slower and this screws up progress bars and such.
最佳答案
TL;DR;
此时我可以得出的唯一结论是,我们的实现存在差异,导致取消对您而言失败。
编辑:在您自己的回答中似乎就是这种情况。区别在于 SDK 版本。 https://stackoverflow.com/a/32034500/2680506
完整答案:
cancel()
方法的说明:
“取消当前的网络请求和回调,无论是上传还是从服务器获取数据。”
我对此很好奇,所以我自己做了一些测试。我拿了我的应用程序,从图像的字节制作了一个 ParseFile
并试图将它保存在后台。
测试 1
Bitmap file = BitmapFactory.decodeResource(context.getResources(), R.drawable.background);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
file.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();
final ParseFile myTestFile = new ParseFile(byteArray);
myTestFile.saveInBackground(new SaveCallback(){
@Override
public void done(ParseException e) {
if(e == null)
{
Log.i(null, "Done saving.");
}
}
}, new ProgressCallback(){
@Override
public void done(Integer progress) {
Log.i(null, "Progress at " + progress + "%");
if(progress > 50)
{
myTestFile.cancel();
}
}});
//myTestFile.cancel();
测试 2
Bitmap file = BitmapFactory.decodeResource(context.getResources(), R.drawable.background);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
file.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();
ParseFile myTestFile = new ParseFile(byteArray);
myTestFile.saveInBackground(new SaveCallback(){
@Override
public void done(ParseException e) {
if(e == null)
{
Log.i(null, "Done saving.");
}
}
}, new ProgressCallback(){
@Override
public void done(Integer progress) {
Log.i(null, "Progress at " + progress + "%");
}});
myTestFile.cancel();
测试 1 的结果与您描述的相似,因为文件非常小,我只在 100% 时获得了一个进度回调,但随后它也调用了 SaveCallback
。
但是,在测试 2 中,cancel()
方法似乎按预期运行,导致没有日志或回调。
取消似乎无法工作因为您是从回调中调用它。这与您在自己的测试中最初取消后继续看到 ProgressCallbacks 的事实是一致的。
编辑
我刚刚上传了一张图片并为自己测试了取消,在我的 Activity 的 onCreate() 方法中我有这段代码:
ParseQuery<ParseObject> newQuery = ParseQuery.getQuery("TestObject");
newQuery.findInBackground(new FindCallback<ParseObject>(){
@Override
public void done(List<ParseObject> objects, ParseException e)
{
ParseFile myTestFile = objects.get(0).getParseFile("file");
myTestFile.getDataInBackground(new GetDataCallback()
{
@Override
public void done(byte[] data, ParseException e)
{
Log.i(null, "Download finished");
}
},
new ProgressCallback()
{
@Override
public void done(Integer percentDone)
{
Log.i(null, "Download at " + percentDone + "%");
}
});
//myTestFile.cancel();
}});
当 cancel 被注释时,它将进入带有填充字节数组的 GetDataCallback。当 cancel 没有注释时,不会发生回调。奇怪的是,ProgressCallback 从未被调用,尽管它说它是有保证的。但是,似乎取消对我有用。
关于android - ParseFile.cancel() 不工作 - 文件一直在下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31909036/
当我尝试通过我的 .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 年前。 我只是想,是
我是一名优秀的程序员,十分优秀!