相关疑难解决方法(0)

使用Java上传文件(带进度条)

我对Java 非常陌生,并且大部分时间都在教我自己,所以我开始构建一个applet.我想创建一个可以从本地磁盘中选择文件并将其作为multipart/form-data POST请求上传但有进度条的文件.显然,用户必须授予Java applet访问硬盘驱动器的权限.现在我已经完成了第一部分工作:用户可以使用JFileChooser对象选择一个文件,方便地返回一个File对象.但我想知道接下来会发生什么.我知道这File.length()将给我文件的总大小(以字节为单位),但是如何将所选内容发送File到网络,以及如何监控已发送的字节数?提前致谢.

java upload file-io progress-bar

30
推荐指数
4
解决办法
6万
查看次数

如何在不使用notifyDataSetChanged()的情况下更新Listview中的某些数据?

我正在尝试ListView使用下载任务列表创建一个.

下载任务在Service(DownloadService)中管理.每次接收到一大块数据时,任务通过a发送进度Broadcast,由Fragment包含ListView(SavedShowListFragment)的接收.收到Broadcast消息后,SavedShowListFragment将更新适配器和触发器中下载任务的进度notifyDataSetChanged().

列表中的每一行都包含a ProgressBar,a TextView表示正在下载的文件的标题,1表示进度的数值,a Button表示下载完成时暂停/恢复下载或播放保存的节目.

问题是暂停/恢复/播放Button通常没有响应(onClick()没有被调用),我认为这是因为整个列表都经常更新notifyDataSetChanged()(每次都有一大块数据,即收到1024字节,这可能是每秒多次,特别是当有多个下载任务正在运行时).

我想我可以在下载任务中增加数据块的大小,但我真的认为我的方法根本不是最优的!

可以经常打电话notifyDataSetChanged()ListViewUI无响应吗?

有什么办法只更新一些ViewsListView行,即在我的情况ProgressBarTextView与进步的数值,而不调用notifyDataSetChanged(),这将更新整个清单吗?

要更新下载任务的进度ListView,有没有比"getChunk/sendBroadcast/updateData/notifyDataSetChanged"更好的选项?

以下是我的代码的相关部分.

下载服务中的下载任务

public class DownloadService extends Service {

    //...

    private class DownloadTask extends AsyncTask<SavedShow, Void, Map<String, Object>> {

        //...

        @Override
        protected Map<String, Object> doInBackground(SavedShow... params) { 

            //...

            BufferedInputStream in = …
Run Code Online (Sandbox Code Playgroud)

android listview notifydatasetchanged

23
推荐指数
2
解决办法
2万
查看次数

如何在Android中使用intentservice同时下载多个文件?

我想创建一个类似于这个的服务(从这里引用),以便在Android中异步下载多个文件.

public static class DownloadingService extends IntentService {
public static String PROGRESS_UPDATE_ACTION = DownloadingService.class
        .getName() + ".newDownloadTask";
private ExecutorService mExec;
private CompletionService<NoResultType> mEcs;
private LocalBroadcastManager mBroadcastManager;
private List<DownloadTask> mTasks;

public DownloadingService() {
    super("DownloadingService");
    mExec = Executors.newFixedThreadPool( 3 ); // The reason to use multiple thread is to download files asynchronously. 
    mEcs = new ExecutorCompletionService<NoResultType>(mExec);
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    return super.onStartCommand(intent, flags, startId);
}

@Override
protected void onHandleIntent(Intent intent) {

  while(true)
  { …
Run Code Online (Sandbox Code Playgroud)

java multithreading android android-download-manager android-intentservice

4
推荐指数
1
解决办法
1万
查看次数