ajax回调与asynctask 下载比较

Aquery框架Ajax回调与AsyncTask 下载比较

获取url数据,最后进行播放的比较代码

AsynTask:

// Async Task Class
        class DownloadMusicfromInternet extends AsyncTask<String,String,String> {

            // Show Progress bar before downloading Music
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                // Shows Progress Bar Dialog and then call doInBackground method
                showDialog(progress_bar_type);
            }

            // Download Music File from Internet
            @Override
            protected String doInBackground(String... f_url) {
                int count;
                try {
                    URL url = new URL(f_url[0]);
                    URLConnection conection = url.openConnection();
                    conection.connect();
                    // Get Music file length
                    int lenghtOfFile = conection.getContentLength();
                    // input stream to read file - with 8k buffer
                    InputStream input = new BufferedInputStream(url.openStream(),10*1024);
                    // Output stream to write file in SD card
                    OutputStream output = new FileOutputStream(Environment.getExternalStorageDirectory().getPath()+"/jai_ho.mp3");
                    byte data[] = new byte[1024];
                    long total = 0;
                    while ((count = input.read(data)) != -1) {
                        total += count;
                        // Publish the progress which triggers onProgressUpdate method
                        publishProgress("" + (int) ((total * 100) / lenghtOfFile));

                        // Write data to file
                        output.write(data,0,count);
                    }
                    // Flush output
                    output.flush();
                    // Close streams
                    output.close();
                    input.close();
                } catch (Exception e) {
                    Log.e("Error: ",e.getMessage());
                }
                return null;
            }

            // While Downloading Music File
            protected void onProgressUpdate(String... progress) {
                // Set progress percentage
                prgDialog.setProgress(Integer.parseInt(progress[0]));
            }

            // Once Music File is downloaded
            @Override
            protected void onPostExecute(String file_url) {
                // dismiss the dialog after the Music file was downloaded
                dismissDialog(progress_bar_type);
                Toast.makeText(getApplicationContext(),"Download complete,playing Music",Toast.LENGTH_LONG).show();
                // Play the music
                playMusic();
            }
        }

Ajax回调:

aq.progress(prgDialog).download(url,target,new AjaxCallback<File>() {
                // Once download is complete
                public void callback(String url,File file,AjaxStatus status) {
                    // If file does exist
                    if (file != null) {
                        playMusic();
                    // If file doesn't exist display error message
                    } else {
                        Toast.makeText(aq.getContext(),"Error occured: Status" + status,Toast.LENGTH_SHORT).show();
                    }
                }
            });
  • aq.download()方法中已经封装了处理逻辑,只需要开发者传入url,目标文件位置和最后回调处理对象即可
  • aq.progress()传入ProgressBar对象,无需额外代码进行进度显示
  • aquery采取链式调用代码简洁

初始化组件的代码比较

AsyncTask:

// 初始化Button
btnPlayMusic = (Button) findViewById(R.id.btnProgressBar);
            // Download Music Button click listener
            btnPlayMusic.setonClickListener(new View.OnClickListener() {
                // When Download Music Button is clicked
                public void onClick(View v) {
                    // disable the button to avoid playing of song multiple times
                    btnPlayMusic.setEnabled(false);
                    // Downloaded Music File path in SD Card
                    File file = new File(Environment.getExternalStorageDirectory().getPath()+"/jai_ho.mp3");
                    // Check if the Music file already exists
                    if (file.exists()) {
                        Toast.makeText(getApplicationContext(),"File already exist under SD card,Toast.LENGTH_LONG).show();
                        // Play Music
                        playMusic();
                    // If the Music File doesn't exist in SD card (Not yet downloaded)
                    } else {
                        Toast.makeText(getApplicationContext(),"File doesn't exist under SD Card,downloading Mp3 from Internet",Toast.LENGTH_LONG).show();
                        // Trigger Async Task (onPreExecute method)
                        new DownloadMusicfromInternet().execute(file_url);
                    }
                }
            });

     ....

// 初始化ProgressDialog
prgDialog = new ProgressDialog(this);
                prgDialog.setMessage("Downloading Mp3 file. Please wait...");
                prgDialog.setIndeterminate(false);
                prgDialog.setMax(100);
                prgDialog.setProgressstyle(ProgressDialog.STYLE_HORIZONTAL);
                prgDialog.setCancelable(false);
                prgDialog.show();

AJAX回调:

// 初始化Button
        // Instantiate AQuery object
        aq = new AQuery(this);
        // Look for button click event using AQuery clicked() method
        aq.id(R.id.btnProgressBar).clicked(this,"downloadSongandplay");


        ....

        // 初始化ProgressBar
        prgDialog = new ProgressDialog(this); // Instantiate Progress Dialog Bar
        prgDialog.setMessage("Downloading MP3 from Internet. Please wait..."); // Set Progress Dialog Bar message
        prgDialog.setIndeterminate(false);  
        prgDialog.setMax(100); // Progress Bar max limit
        prgDialog.setProgressstyle(ProgressDialog.STYLE_HORIZONTAL); // Progress Bar style
        prgDialog.setCancelable(false); // Progress Bar cannot be cancelable
        // display progress dialog bar and initiate download of Mp3 file
        aq.progress(prgDialog);

播放音乐文件代码,此处相同

protected void playMusic(){
        // Read Mp3 file present under SD card
        Uri myUri1 = Uri.parse("file:///sdcard/pgfolder/jai_ho.mp3");
        mPlayer  = new MediaPlayer();
        mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        try {
                mPlayer.setDataSource(aq.getContext(),myUri1);
                mPlayer.prepare();
                // Start playing the Music file
                mPlayer.start();
                mPlayer.setonCompletionListener(new OnCompletionListener() {
                    public void onCompletion(MediaPlayer mp) {
                        // Todo Auto-generated method stub
                        // Once Music is completed playing,enable the button
                        aq.id(R.id.btnProgressBar).enabled(true);
                        Toast.makeText(getApplicationContext(),"Music completed playing",Toast.LENGTH_LONG).show();
                    }
                });
        } catch (IllegalArgumentException e) {
            Toast.makeText(getApplicationContext(),"You might not set the URI correctly!",Toast.LENGTH_LONG).show();
        } catch (SecurityException e) {
            Toast.makeText(getApplicationContext(),"URI cannot be accessed,permissed needed",Toast.LENGTH_LONG).show();
        } catch (IllegalStateException e) {
            Toast.makeText(getApplicationContext(),"Media Player is not in correct state",Toast.LENGTH_LONG).show();
        } catch (IOException e) {
            Toast.makeText(getApplicationContext(),"IO Error occured",Toast.LENGTH_LONG).show();
        }
    }

参考资料

相关文章

IE6是一个非常老旧的网页浏览器,虽然现在很少人再使用它,但...
PHP中的count()函数是用来计算数组或容器中元素的个数。这个...
使用 AJAX(Asynchronous JavaScript and XML)技术可以在不...
Ajax(Asynchronous JavaScript and XML)是一种用于改进网页...
本文将介绍如何通过AJAX下载Excel文件流。通过AJAX,我们可以...
Ajax是一种用于客户端和服务器之间的异步通信技术。通过Ajax...