开发者

Variables Not Containing Data?

开发者 https://www.devze.com 2023-04-10 23:42 出处:网络
I am trying to use my download code that works perfectly fine in my other app, but it is acting very strange in this new app I am trying to make.

I am trying to use my download code that works perfectly fine in my other app, but it is acting very strange in this new app I am trying to make.

public class DownloadFile extends AsyncTask<Void, Integer, String> {                                                         
    String SDCardRoot;
    String mixtapeurl = "http://xxxxxx.com/xxxxxxxxxxxx/Mixtapes/NCredible/J.%20Cole%20-%20Cole%20World.zip";
    NotificationManager notificationManager;
    Notification notification2;
    ProgressBar progressBar;

    @Override
    protected void onPreExecute() {         
        // configure the intent
        Intent intent = new Intent();
        final PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, 0);

        // configure the notification
        notification2 = new Notification(R.drawable.download, "DOWNLOADING: " + mixtapeurl, System
                .currentTimeMillis());
        notification2.flags = notification2.flags | Notification.FLAG_ONGOING_EVENT;
        notification2.contentView = new RemoteViews(getApplicationContext().getPackageName(), R.layout.download_progress);
        notification2.contentIntent = pendingIntent;
        notification2.contentView.setTextViewText(R.id.percentage, 0 + "%" );
        notification2.contentView.setTextViewText(R.id.status_text, "DOWNLOADING: " + mixtapeurl);
        notification2.contentView.setProgressBar(R.id.status_progress, 100, 0, false);

        getApplicationContext();
        notificationManager = (NotificationManager) getApplicationContext().getSystemService(
                Context.NOTIFICATION_SERVICE);

        notificationManager.notify(2, notification2);                   
    }

    @Override
    protected String 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(mixtapeurl);

            //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,mixtapeurl);

            //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;
            int myProgress;

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

            //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));
                    myProgress = (int) ((downloadedSize/(double)totalSize) * (double)100); 


                    if ((myProgress) > 1 && (myProgress) > ((previousProgress ))) {
             开发者_StackOverflow       previousProgress= myProgress;

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

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


    @Override
    protected void onProgressUpdate(Integer... progression) {           
        String percent;
        percent = progression[0].toString();

        notification2.contentView.setProgressBar(R.id.status_progress, 100, progression[0], false);                     

        notification2.contentView.setTextViewText(R.id.percentage, percent + "%" );
        notificationManager.notify(2, notification2);    

    }

    @Override
    protected void onPostExecute(String result) {
        // TODO Auto-generated method stub                  
        Toast toast = Toast.makeText(getApplicationContext(), mixtapeurl + " downloaded to: " + SDCardRoot, Toast.LENGTH_LONG);
        toast.show();
    }
}

Here is how I implement it:

new DownloadFile().execute();

And what i get is "http://xxxxxx.com/xxxxxxxxxxxx/Mixtapes/NCredible/J.%20Cole%20-%20Cole%20World.zip download to null" for my toast right after I click the button and the file does not download at all.


This sounds like a very common issue: Forgot to set permission in manifest.

<uses-permission android:name="android.permission.INTERNET" />
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号