当.3gp文件转换为.zip时,ProgressDialog不显示

时间:2014-01-09 17:09:17

标签: android progressdialog android-videoview

我正在使用Android应用。

点击按钮时,我需要显示一个进度对话框。

在该按钮中,我将视频文件转换为.zip文件并计算该文件大小。 在这个过程中,我需要显示一个ProgressDialog,但它没有显示。

屏幕在计算时被触发,计算后显示ProgressDialog,然后屏幕导航到下一个屏幕。

我的代码:

    save.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
                    MediaCheck.this.runOnUiThread(new Runnable() {
                        public void run() {
                    pd = ProgressDialog.show(MediaCheck.this, "",
                                    "Checking the video compatability. Please wait", true);
                        }
                    });
                    video_Path= makeZip(video_Path);
                    if (video_Path.equalsIgnoreCase("File size is too large")) {
                        pd.dismiss();
                        Toast.makeText(getApplicationContext(),
                                "Large video", Toast.LENGTH_LONG)
                                .show();
                        return;
                    }
pd.dismiss();       
// Doing screen navigation here.
        }
    });

制作拉链并知道尺寸的代码

private static String makeZip(String videoPath) {
    byte[] buffer = new byte[1024];
    String[] videoFileName = videoPath.split("/");
    File directory = null;
    try {
        ContextWrapper cw = new ContextWrapper(context_this);
        // path to /data/data/yourapp/app_data/imageDir
        directory = cw.getDir("imageDir", Context.MODE_PRIVATE);
        FileOutputStream fos = new FileOutputStream(directory
                + "/IRCMS_Video.zip");
        ZipOutputStream zos = new ZipOutputStream(fos);
        ZipEntry ze = null;
        ze = new ZipEntry(videoFileName[5]);
        zos.putNextEntry(ze);
        FileInputStream in = new FileInputStream(videoPath);

        int len;

        while ((len = in.read(buffer)) > 0) {
            zos.write(buffer, 0, len);
        }
        File videoZip = new File(directory + "/IRCMS_Video.zip");
        videoLength = videoZip.length() / (1024 * 1024);
        if (videoLength > 3)
            return "File size is too large";
        in.close();
        zos.closeEntry();

        // remember close it
        zos.close();

        System.out.println("Done");

    } catch (IOException ex) {
        ex.printStackTrace();
    }
    return directory.toString() + "/IRCMS_Video.zip";

}
}

请帮忙......

2 个答案:

答案 0 :(得分:1)

然后您应该尝试ASYNCTASK轻松执行操作并降低使用线程的复杂性

private class Converter extends AsyncTask<String, Void, Void> { //Converter is class name
     protected String doInBackground(String... urls) {
         //THIS METHOD WILL BE CALLED AFTER ONPREEXECUTE
         //YOUR NETWORK OPERATION HERE
         return null;
     }

     protected void onPreExecute() {
         super.onPreExecute();
         //THIS METHOD WILL BE CALLED FIRST
         //DO OPERATION LIKE SHOWING PROGRESS DIALOG PRIOR TO BEGIN NETWORK OPERATION
     }

     protected void onPostExecute(String result) {
         super.onPostExecute();
         //TNIS METHOD WILL BE CALLED AT LAST AFTER DOINBACKGROUND
         //DO OPERATION LIKE UPDATING UI HERE
     }
 }

答案 1 :(得分:0)

您正在对UI线程进行计算,因此它会挂起您的应用。在后台线程上进行计算。您可以通过 -

解决此问题
save.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                pd = ProgressDialog.show(MediaCheck.this, "",
                        "Checking the video compatability. Please wait", true);
                Thread background = new Thread(new Runnable() {

                    public void run() {
                        // TODO Auto-generated method stub
                        video_Path= makeZip(video_Path);

                        MediaCheck.this.runOnUiThread(new Runnable() 
                        {
                            public void run() 
                            {

                                if (video_Path.equalsIgnoreCase("File size is too large")) {
                                    pd.dismiss();
                                    Toast.makeText(getApplicationContext(),
                                            "Large video", Toast.LENGTH_LONG)
                                            .show();
                                    pd.dismiss();  
                                    return;
                                }
                            }
                        });
                    }
                });
                background.start();
                // Doing screen navigation here.
            }
        });