onActivityResult是异步的,我的ProgressBar没有显示

时间:2016-05-10 11:56:13

标签: android android-progressbar

我从ACTION_GET_CONTENT开始DialogFragment意图,用户可以在其中选择文件。 选择文件后,活动结束,并执行结果onActivityResult

onActivityResult我正在阅读文件的输入流,这可能需要一段时间,因为有些文件是从互联网上下载的。

要向用户提供反馈,我想显示一个确定的进度条。问题是在onActivityResult完成后会显示进度条。我在运行调试器时发现了这一点。

如何在执行onActivityResult时显示进度对话框?

@Override
public void onActivityResult(int requestCode, int resultCode, final Intent data) {
    // TODO Fix no activity available
    if (data == null)
        return;
    switch (requestCode) {
        case PICKFILE_RESULT_CODE:
            if (resultCode == Activity.RESULT_OK) {
                final ClipData clipData = data.getClipData();
                if (clipData != null) {
                    for (int i = 0; i < clipData.getItemCount(); i++){
                        final ClipData.Item item = clipData.getItemAt(i);
                        addAttachment(item.getUri());
                    }
                } else {
                    addAttachment(data.getData());
                }
            }
    }
}


private void addAttachment(Uri uri) {
    File file;

    String filePath = AttachmentUtils.getPath(getContext(), uri);
    if (!Utils.isEmpty(filePath)) {
        file = new File(filePath);
    } else {


        ProgressDialog progressDialog = new ProgressDialog(getActivity());
        progressDialog.setIndeterminate(false);
        progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        progressDialog.setCanceledOnTouchOutside(false);
        progressDialog.setMessage("Bezig met downloaden");
        progressDialog.show();

        file = AttachmentUtils.getFileFromStream(getActivity(), uri, progressDialog);

        progressDialog.hide();

        return;
    }

   //some more code where I do things with the files after download

}

3 个答案:

答案 0 :(得分:1)

检查在ui线程或其他线程上运行的调用之下。隐藏getFileFromStream的进度条对话框结束。不要打电话到下一行。

  

AttachmentUtils.getFileFromStream(getActivity(),uri,progressDialog);

答案 1 :(得分:0)

像这样改变

@Override
public void onActivityResult(int requestCode, int resultCode, final Intent data) {
// TODO Fix no activity available
ProgressDialog progressDialog;
if (data == null)
    return;
switch (requestCode) {
    case PICKFILE_RESULT_CODE:

    progressDialog = new ProgressDialog(getActivity());
    progressDialog.setIndeterminate(false);
    progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    progressDialog.setCanceledOnTouchOutside(false);
    progressDialog.setMessage("Bezig met downloaden");
    progressDialog.show();


        if (resultCode == Activity.RESULT_OK) {
            final ClipData clipData = data.getClipData();
            if (clipData != null) {
                for (int i = 0; i < clipData.getItemCount(); i++){
                    final ClipData.Item item = clipData.getItemAt(i);
                    addAttachment(item.getUri());
                }
            } else {
                addAttachment(data.getData());
            progressDialog.dismiss();
            }
        }
}
}


private void addAttachment(Uri uri) {
File file;

String filePath = AttachmentUtils.getPath(getContext(), uri);
if (!Utils.isEmpty(filePath)) {
    file = new File(filePath);
} else {



    file = AttachmentUtils.getFileFromStream(getActivity(), uri, progressDialog);


    return;
}

 //some more code where I do things with the files after download

}

希望这个帮助

答案 2 :(得分:0)

当您需要从服务器下载时,需要在后台线程中执行这些操作。在此,启动AsyncTask对象并执行以下操作

@Override
    protected void onPreExecute() {
        dlg = new ProgressDialog(ctx);
        dlg.setMessage("Loading....");
        super.onPreExecute();
    }

@Override
protected void onPostExecute(Object result) {
    dlg.dismiss();
    if ( result instanceof Exception ) {
        // show error message
    } else {
        // display data
    }
    super.onPostExecute(result);
}

@Override
protected Object doInBackground(Object... params) {

    try {

    // return data;
    } catch ( Exception e ) {
        return e;
    }

}