Android 异步任务中的进度对话框(PostExecute)

Android 异步任务中的进度对话框(PostExecute),android,android-listview,android-asynctask,android-bitmap,Android,Android Listview,Android Asynctask,Android Bitmap,我实现了一个异步任务,为视频播放列表创建缩略图。在后台线程期间,我实现了一个进度对话框,该对话框在预执行任务中触发。目前,我正在关闭postExecute方法的对话框,但我肯定遗漏了什么。我能在这方面得到一些帮助吗 我的代码在下面 VideoListActivity.java package com.oneplc.viessmannapp; 导入java.io.File; 导入java.text.simpleDataFormat; 导入java.util.Date; 导入java.util.Lo

我实现了一个异步任务,为视频播放列表创建缩略图。在后台线程期间,我实现了一个进度对话框,该对话框在预执行任务中触发。目前,我正在关闭postExecute方法的对话框,但我肯定遗漏了什么。我能在这方面得到一些帮助吗

我的代码在下面

VideoListActivity.java
package com.oneplc.viessmannapp;
导入java.io.File;
导入java.text.simpleDataFormat;
导入java.util.Date;
导入java.util.Locale;
导入android.media.MediaPlayer;
导入android.net.Uri;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.os.Environment;
导入android.os.Handler;
导入android.os.Message;
导入wseemann.media.ffmpegmediametadata检索器;
导入android.media.ThumbnailUtils;
导入android.provider.MediaStore;
导入android.widget.GridView;
导入android.annotation.SuppressLint;
导入android.app.Activity;
导入android.app.ProgressDialog;
导入android.content.Context;
导入android.content.Intent;
导入android.graphics.Bitmap;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.Adapter;
导入android.widget.AdapterView;
导入android.widget.BaseAdapter;
导入android.widget.ImageView;
导入android.widget.ListView;
导入android.widget.TextView;
导入android.widget.Toast;
导入android.widget.AdapterView.OnItemClickListener;
公共类VideoListActivity扩展了活动{
专用静态进程对话框;
私有静态字符串媒体路径;
String[]fileList=null;
ListView-mList;
字符串文件路径;
字符串MIME_TYPE=“video/mp4”;
私有图像视图goBack;
私有静态上下文mContext;
专用图像适配器mAdapter;
私有处理程序mHandler=新处理程序(){
@凌驾
公共无效handleMessage(消息消息消息){
mAdapter.notifyDataSetChanged();
}
};
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u video\u列表);
goBack=(ImageView)findViewById(R.id.back\u btn);
mContext=这个;
setActionListeners();
String folder=getIntent().getStringExtra(“文件夹”);
媒体路径=新字符串(Environment.getExternalStorageDirectory().getPath()+“/”+文件夹+“/”;
updateVideoList();
FILE_PATH=Environment.getExternalStorageDirectory().getPath()+“/”+folder+“/”;
mList=(ListView)findViewById(R.id.listView1);
如果(文件列表!=null){
mAdapter=新的ImageAdapter(此,文件列表);
mList.setAdapter(mAdapter);
}
mList.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父视图、视图v、,
内部位置,长id){
Toast.makeText(
getApplicationContext(),
((文本视图)v.findViewById(R.id.item_title))
.getText(),Toast.LENGTH_SHORT).show();
字符串videoFilePath=文件路径+文件列表[位置];
System.out.println(“*******************************************视频文件路径*******************”+视频文件路径);
System.out.println(“*****************************************************************************”+MiME_类型);
//意图=新意图(android.content.Intent.ACTION\u视图);
//File newFile=新文件(videoFilePath);
//intent.setDataAndType(Uri.fromFile(newFile),MiME_类型);
//星触觉(意向);
意向意向=新意向(VideoListActivity.this、VideoViewActivity.class);
intent.putExtra(“视频路径”,videoFilePath);
星触觉(意向);
}
});
}
私有void setActionListeners(){
//TODO自动生成的方法存根
goBack.setOnClickListener(新视图.OnClickListener(){
@SuppressLint(“新API”)
@凌驾
公共void onClick(视图){
//TODO自动生成的方法存根
//清除VM堆堆栈
gc();
完成();
}
});
}
公共静态字符串FormatDate(日期yourDate){
SimpleDataFormat sdf=新的SimpleDataFormat(“mm:ss”,Locale.US);
返回sdf.format(您的日期);
}
public void updateVideoList(){
文件videoFiles=新文件(媒体路径);
Log.d(“*********videoFiles的值*******”,videoFiles.toString());
System.out.println(媒体路径);
if(videoFiles.isDirectory()){
fileList=videoFiles.list();
}
if(fileList==null){
System.out.println(“文件不退出”);
Toast.makeText(这个“没有文件”,Toast.LENGTH_SHORT.show();
}否则{
System.out.println(“文件列表*************”+文件列表);
for(int i=0;ipackage com.oneplc.viessmannapp;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;



import android.media.MediaPlayer;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import wseemann.media.FFmpegMediaMetadataRetriever;
import android.media.ThumbnailUtils;
import android.provider.MediaStore;
import android.widget.GridView;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Adapter;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

public class VideoListActivity extends Activity {

    private static ProgressDialog pDialog;

    private static String MEDIA_PATH;

    String[] fileList = null;

    ListView mList;
    String FILE_PATH;
    String MIME_TYPE = "video/mp4";

    private ImageView goBack;
    private static Context mContext;

    private ImageAdapter mAdapter;

    private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            mAdapter.notifyDataSetChanged();                       
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_video_list);

        goBack = (ImageView) findViewById(R.id.back_btn);
        mContext = this;
        setActionListeners();

        String folder = getIntent().getStringExtra("folder");

        MEDIA_PATH = new String(Environment.getExternalStorageDirectory().getPath() + "/"+folder+"/");
        updateVideoList();
        FILE_PATH = Environment.getExternalStorageDirectory().getPath() + "/"+folder+"/";

        mList = (ListView) findViewById(R.id.listView1);
        if(fileList !=null){
            mAdapter = new ImageAdapter(this, fileList);
            mList.setAdapter(mAdapter);
        }
        mList.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View v,
                    int position, long id) {
                Toast.makeText(
                        getApplicationContext(),
                        ((TextView) v.findViewById(R.id.item_title))
                        .getText(), Toast.LENGTH_SHORT).show();
                String videoFilePath = FILE_PATH + fileList[position];
                System.out.println("******************************videoFilePath****************" + videoFilePath);
                System.out.println("******************************MiME_TYPE****************"+ MIME_TYPE);
                //                Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
                //                File newFile = new File(videoFilePath);
                //                intent.setDataAndType(Uri.fromFile(newFile), MiME_TYPE);
                //                startActivity(intent);
                Intent intent = new Intent(VideoListActivity.this, VideoViewActivity.class);
                intent.putExtra("videopath", videoFilePath);
                startActivity(intent);
            }
        });

    }

    private void setActionListeners() {
        // TODO Auto-generated method stub
        goBack.setOnClickListener(new View.OnClickListener() {

            @SuppressLint("NewApi")
            @Override
            public void onClick(View view) {
                // TODO Auto-generated method stub
                //Clear up VM heap stack
                System.gc();
                finish();
            }
        });
    }

    public static String FormatDate(Date yourDate) {

        SimpleDateFormat sdf = new SimpleDateFormat("mm:ss",Locale.US);

        return sdf.format(yourDate);

    }

    public void updateVideoList() {
        File videoFiles = new File(MEDIA_PATH);
        Log.d("*********Value of videoFiles******", videoFiles.toString());
        System.out.println(MEDIA_PATH);
        if (videoFiles.isDirectory()) {
            fileList = videoFiles.list();
        }
        if (fileList == null) {
            System.out.println("File doesnot exit");
            Toast.makeText(this, "There is no file", Toast.LENGTH_SHORT).show();
        } else {
            System.out.println("fileList****************" + fileList);
            for (int i = 0; i < fileList.length; i++) {
                Log.e("Video:" + i + " File name", fileList[i]);
            }
        }
    }

    public static Bitmap scaleBimtap(Bitmap bitmap, int width, int height) {
        final int bitmapWidth = bitmap.getWidth();
        final int bitmapHeight = bitmap.getHeight();

        final float scale = Math.min((float) width / (float) bitmapWidth,
                (float) height / (float) bitmapHeight);

        final int scaledWidth = (int) (bitmapWidth * scale);
        final int scaledHeight = (int) (bitmapHeight * scale);

        final Bitmap decoded = Bitmap.createScaledBitmap(bitmap, scaledWidth, scaledHeight, true);

        return decoded;
    }

    private class ProcessImageTask extends AsyncTask<Void, Void, Bitmap> {

        private Handler mHandler;
        private ImageView mImageView;
        private String mUri;

        public ProcessImageTask(Handler handler, ImageView imageView, String uri) {
            mHandler = handler;
            mImageView = imageView;
            mUri = uri;
        }

        protected void onPreExecute(){
            super.onPreExecute();
            pDialog = new ProgressDialog(mContext);
            pDialog.setMessage("Loading Playlist...");
            pDialog.show();
        }

        @Override
        protected Bitmap doInBackground(Void... v) {
            FFmpegMediaMetadataRetriever mmr = new FFmpegMediaMetadataRetriever();
            mmr.setDataSource(mUri);

            //here you change the thumbnail frame
            Bitmap bmThumbnail = mmr.getFrameAtTime(2000000, FFmpegMediaMetadataRetriever.OPTION_CLOSEST); // frame at 2 seconds
            if(bmThumbnail !=null){
                scaleBimtap(bmThumbnail, 20, 20);

            }
            mmr.release();
            //-----------------
            return bmThumbnail;
        }

        protected void onPostExecute(Bitmap bitmap) {
            super.onPostExecute(bitmap);
            //-----------------
            if (bitmap != null) {
                System.out
                .println(">>>>>>>>>>>>>>>>>>>>>>>>>>>> THUMB NAIL>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
                mImageView.setImageBitmap(bitmap);
                mHandler.sendEmptyMessage(0);

            } else {
                System.out
                .println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>NO THUMB NAIL>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
            }
            pDialog.dismiss();
        }
    }

    public class ImageAdapter extends BaseAdapter {
        private final Context context;
        private final String[] VideoValues;

        public ImageAdapter(Context context, String[] VideoValues) {
            this.context = context;
            this.VideoValues = VideoValues;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            System.out.println("***********IngetView************");
            LayoutInflater inflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View listview;

            if (convertView == null) {

                listview = new View(context);    
                listview = inflater.inflate(R.layout.gridlayout, null);          
                TextView textView = (TextView) listview
                        .findViewById(R.id.item_title);      
                TextView tv_time = (TextView) listview
                        .findViewById(R.id.tv_time);

                textView.setText(fileList[position]);
                System.out.println("value of fileList[position]" + fileList[0]);
                // set image
                ImageView imageThumbnail = (ImageView) listview
                        .findViewById(R.id.item_image);
                int msec = MediaPlayer.create(context, Uri.fromFile(new File(FILE_PATH + fileList[position]))).getDuration();

                tv_time.setText(FormatDate(new Date(msec)));
                System.out
                .println(">>>>>>>>>>>>>>>>>>>>>>>>>>>> file path>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
                        + fileList[position]);
                /*FFmpegMediaMetadataRetriever mmr = new FFmpegMediaMetadataRetriever();
                                mmr.setDataSource(FILE_PATH + fileList[position]);

                                //here you change the thumbnail frame
                                Bitmap bmThumbnail = mmr.getFrameAtTime(2000000, FFmpegMediaMetadataRetriever.OPTION_CLOSEST); // frame at 2 seconds

                                mmr.release();
                                //-----------------
                                if (bmThumbnail != null) {
                                        System.out
                                        .println(">>>>>>>>>>>>>>>>>>>>>>>>>>>> THUMB NAIL>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
                                        imageThumbnail.setImageBitmap(bmThumbnail);
                                } else {
                                        System.out
                                        .println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>NO THUMB NAIL>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
                                }*/

                new ProcessImageTask(mHandler, imageThumbnail, FILE_PATH + fileList[position]).execute();

            } else {
                listview = convertView;
            }
            return listview;
        }
        @Override
        public int getCount() {
            // return 0;
            return VideoValues.length;
        }
        @Override
        public Object getItem(int position) {
            return null;
        }
        @Override
        public long getItemId(int position) {
            return 0;
        }
    }


}
protected void onPostExecute(Bitmap bitmap) {
super.onPostExecute(bitmap);
//-----------------
if (bitmap != null) {
    System.out
    .println(">>>>>>>>>>>>>>>>>>>>>>>>>>>> THUMB NAIL>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
    mImageView.setImageBitmap(bitmap);
    mHandler.sendEmptyMessage(0);

} else {
    System.out
    .println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>NO THUMB NAIL>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
}
pDialog.dismiss();
}
pDialog = new ProgressDialog(mContext);
private static ProgressDialog pDialog;
private static int pDialogCounter = 0;
protected void onPreExecute(){
    super.onPreExecute();
    if(pDialog == null) {
        pDialog = new ProgressDialog(mContext);
        pDialog.setMessage("Loading Playlist...");
        pDialog.show();
    }
    ++pDialogCounter;
}
protected void onPostExecute(Bitmap bitmap) {
    super.onPostExecute(bitmap);
    ...
    if(--pDialogCounter == 0) {
        pDialog.dismiss();
        pDialog = null;
    }
}
ProgressDialog dialog; 

protected void onPreExecute() {
          dialog = ProgressDialog.show(importExportActivity.this, "",
                                  "Loading Playlist...", true);
    }

    @Override
    protected void onPostExecute(final Void success) {
          dialog.dismiss();
    }