简体   繁体   English

有人可以帮我把我使用的下载代码放在ASyncTask中吗?

[英]Can someone help me put this download code that I use in ASyncTask?

It works just fine when I run it in a thread, but I want to use Asynctask and when I execute my version of it, nothing happens: 当我在线程中运行它时,它工作得很好,但是我想使用Asynctask,当我执行它的版本时,什么也没发生:

try {
  //set the download URL, a url that points to a file on the internet
  //this is the file to be downloaded
  URL url = new URL(filename2);

  //create the new connection
  HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

  //set up some things on the connection
  urlConnection.setRequestMethod("GET");
  urlConnection.setDoOutput(true);

  //and connect!
  urlConnection.connect();

  //set the path where we want to save the file
  //in this case, going to save it on the root directory of the
  //sd card.
  SDCardRoot = Environment.getExternalStorageDirectory() + "/download/";
  //create a new file, specifying the path, and the filename
  //which we want to save the file as.
  File file = new File(SDCardRoot,filename3);

  //this will be used to write the downloaded data into the file we created
  FileOutputStream fileOutput = new FileOutputStream(file);

  //this will be used in reading the data from the internet
  InputStream inputStream = urlConnection.getInputStream();

  //this is the total size of the file
  //int totalSize = urlConnection.getContentLength();
  //variable to store total downloaded bytes
  int downloadedSize = 0;

  //create a buffer...
  byte[] buffer = new byte[1024];
  int bufferLength = 0; //used to store a temporary size of the buffer

  //now, read through the input buffer and write the contents to the file
  while ((bufferLength = inputStream.read(buffer)) > 0) {
    //add the data in the buffer to the file in the file output stream (the file on the sd card
    fileOutput.write(buffer, 0, bufferLength);
    //add up the size so we know how much is downloaded
    downloadedSize += bufferLength;
    //this is where you would do something to report the prgress, like this maybe
    //updateProgress(downloadedSize, totalSize);
    //publishProgress((int)(total*100/lenghtOfFile));
  }

  //close the output stream when done
  fileOutput.close();
//catch some possible errors...
} catch (MalformedURLException e) {             
  e.printStackTrace();
} catch (IOException e) {               
  e.printStackTrace();
}

THIS IS MY ATTEMPT AS REQUESTED: 这是我的要求:

      private class DownloadFile extends AsyncTask<Void, Integer, Long> {
       protected void onProgressUpdate(Integer... progress) {

    }

    protected void onPostExecute(Long result) {
        Intent in = new Intent(mainmenu.this, DownloadService.class);           
        stopService(in);

    }

    @Override
    protected Long doInBackground(Void... params) {
        try {

            //set the download URL, a url that points to a file on the internet
            //this is the file to be downloaded
            URL url = new URL(filename2);


            //create the new connection
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

            //set up some things on the connection
            urlConnection.setRequestMethod("GET");
            urlConnection.setDoOutput(true);

            //and connect!
            urlConnection.connect();

            //set the path where we want to save the file
            //in this case, going to save it on the root directory of the
            //sd card.
            SDCardRoot = Environment.getExternalStorageDirectory() + "/download/";
            //create a new file, specifying the path, and the filename
            //which we want to save the file as.
            File file = new File(SDCardRoot,filename3);

            //this will be used to write the downloaded data into the file we created
            FileOutputStream fileOutput = new FileOutputStream(file);

            //this will be used in reading the data from the internet
            InputStream inputStream = urlConnection.getInputStream();

            //this is the total size of the file
            //int totalSize = urlConnection.getContentLength();
            //variable to store total downloaded bytes
            int downloadedSize = 0;

            //create a buffer...
            byte[] buffer = new byte[1024];
            int bufferLength = 0; //used to store a temporary size of the buffer

            //now, read through the input buffer and write the contents to the file
            while ( (bufferLength = inputStream.read(buffer)) > 0 ) {
                    //add the data in the buffer to the file in the file output stream (the file on the sd card
                    fileOutput.write(buffer, 0, bufferLength);
                    //add up the size so we know how much is downloaded
                    downloadedSize += bufferLength;
                    //this is where you would do something to report the prgress, like this maybe
                    //updateProgress(downloadedSize, totalSize);
                    //publishProgress((int)(total*100/lenghtOfFile));


            }
            //close the output stream when done
            fileOutput.close();





    //catch some possible errors...
    } catch (MalformedURLException e) {             
            e.printStackTrace();
    } catch (IOException e) {               
            e.printStackTrace();
    }
        return null;
    }


}

here you go 干得好

public class WebRequest extends AsyncTask<URL, Void, String> {
ProgressDialog dialog;
Context _context;

String _title;
String _message;

public WebRequest(Context context, 
        String ProgressTitle, String ProgressMessage) {
    this._context = context;

    this._title = ProgressTitle;
    this._message = ProgressMessage;
}

@Override
protected void onPreExecute() {

    // TODO Auto-generated method stub
    dialog = new ProgressDialog(_context);
    dialog.setTitle(_title);
    dialog.setMessage(_message);
    dialog.show();

}

@Override
protected String doInBackground(URL... params) {
    // TODO Auto-generated method stub

    try {

        //set the download URL, a url that points to a file on the internet
        //this is the file to be downloaded
        URL url = params[0];


        //create the new connection
        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

        //set up some things on the connection
        urlConnection.setRequestMethod("GET");
        urlConnection.setDoOutput(true);

        //and connect!
        urlConnection.connect();

        //set the path where we want to save the file
        //in this case, going to save it on the root directory of the
        //sd card.
        SDCardRoot = Environment.getExternalStorageDirectory() + "/download/";
        //create a new file, specifying the path, and the filename
        //which we want to save the file as.
        File file = new File(SDCardRoot,filename3);

        //this will be used to write the downloaded data into the file we created
        FileOutputStream fileOutput = new FileOutputStream(file);

        //this will be used in reading the data from the internet
        InputStream inputStream = urlConnection.getInputStream();

        //this is the total size of the file
        //int totalSize = urlConnection.getContentLength();
        //variable to store total downloaded bytes
        int downloadedSize = 0;

        //create a buffer...
        byte[] buffer = new byte[1024];
        int bufferLength = 0; //used to store a temporary size of the buffer

        //now, read through the input buffer and write the contents to the file
        while ( (bufferLength = inputStream.read(buffer)) > 0 ) {
                //add the data in the buffer to the file in the file output stream (the     file on the sd card
                fileOutput.write(buffer, 0, bufferLength);
                //add up the size so we know how much is downloaded
                downloadedSize += bufferLength;
                //this is where you would do something to report the prgress, like this maybe
                //updateProgress(downloadedSize, totalSize);
                //publishProgress((int)(total*100/lenghtOfFile));


        }
        //close the output stream when done
        fileOutput.close();

       return "Success";



//catch some possible errors...
} catch (MalformedURLException e) {             
        e.printStackTrace();
    return "Failed";
} catch (IOException e) {               
        e.printStackTrace();
           return "Failed";
}
}

@Override
protected void onPostExecute(String result) {
    // TODO Auto-generated method stub

    if (dialog.isShowing())
        dialog.cancel();

    Toast.makeText(_context,result,Toast.LENGTH_LONG);

}

}

//using this //使用这个

 WebRequest request = new WebRequest(context,"Downloading","Please wait..");
 request.Execute(object of URL);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM