Autore Topic: Problema download con AsyncDownload  (Letto 1168 volte)

Offline overflow

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Huawei G 330
  • Sistema operativo:
    OS X 10.8.4
Problema download con AsyncDownload
« il: 07 Agosto 2013, 22:53:28 CEST »
0
il codice funziona tutto tranne che il file scaricato non risulta essere completo su 6 mb ne vengono scaricati 1,5 circa sapreste aiutarmi

Codice (Java): [Seleziona]
package com.mfweb.myapp;

import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.content.Intent;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

        public String urlServer="http://myurl/test.php?url=";
        public StringBuilder test = new StringBuilder();
        public TextView txtView;
       
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);

                //text view
                txtView = (TextView)findViewById(R.id.textView1);

                //intent
                Intent receivedIntent = getIntent();
                //get the action
                String receivedAction = receivedIntent.getAction();
                //find out what we are dealing with
                String receivedType = receivedIntent.getType();

                //make sure it's an action and type we can handle
                if(receivedAction.equals(Intent.ACTION_SEND)){
                        if(receivedType.startsWith("text/")){
                                //get the received text
                                String receivedText = receivedIntent.getStringExtra(Intent.EXTRA_TEXT);
                                //check we have a string
                                if (receivedText != null) {
                                        //set the text
                                        final String ultimurl=urlServer+receivedText;
                                        new AsyncDownload().execute(ultimurl);
                                        txtView.setText(test.toString());
                                }
                        }
                }
                else if(receivedAction.equals(Intent.ACTION_MAIN)){
                        //app has been launched directly, not from share list
                        txtView.setText("aperto normale!");
                }
        }
       
    private class AsyncDownload extends AsyncTask<String, Void, Void> {
               
        @Override
        protected Void doInBackground(String... urls) {
                // TODO Auto-generated method stub
                HttpClient client = new DefaultHttpClient();
                HttpGet httpGet = new HttpGet(urls[0]);
                try {
                        HttpResponse response = client.execute(httpGet);
                        StatusLine statusLine = response.getStatusLine();
                        int statusCode = statusLine.getStatusCode();
                        if (statusCode == 200) {
                                HttpEntity entity = response.getEntity();
                                InputStream content = entity.getContent();
                                BufferedReader reader = new BufferedReader(
                                new InputStreamReader(content));
                                String line;
                                while ((line = reader.readLine()) != null) {
                                        test.append(line);
                                }
                                downloader(test.toString());
                        } else {
                                test.append("nnt");
                        }
                } catch (ClientProtocolException e) {
                        e.printStackTrace();
                } catch (IOException e) {
                        e.printStackTrace();
                }
               
                return null;
        }
       
        private void downloader(String name) throws IOException, IOException {
            String furl= "http://myurl/index.php?mp3="+name;
            try{

                URL url  = new URL(furl);
                URLConnection conexion = url.openConnection();
                conexion.connect();

                //int lenghtOfFile = conexion.getContentLength();


                InputStream is = url.openStream();

                File testDirectory = new File(Environment.getExternalStorageDirectory()+"/mp3download/");
            if(!testDirectory.exists()){
                testDirectory.mkdir();
            }

                FileOutputStream fos = new FileOutputStream(testDirectory+"/"+name);

                int count = 0;

                while ((count=is.read()) != -1)
                        fos.write(count);

                is.close();
                fos.close();


            }catch(Exception e){
                e.printStackTrace();
            }
    }
       
        @Override
                protected void onPostExecute(Void unused) {
                Toast.makeText(MainActivity.this, test.toString(),Toast.LENGTH_SHORT).show();
                }      
}
   
}

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Problema download con AsyncDownload
« Risposta #1 il: 08 Agosto 2013, 08:24:35 CEST »
0
Con file piccoli funziona?

Hai provato a bufferare il fileoutputstream? (come in questo esempio FileOutputStream | Android Developers )
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline overflow

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Huawei G 330
  • Sistema operativo:
    OS X 10.8.4
Re:Problema download con AsyncDownload
« Risposta #2 il: 08 Agosto 2013, 09:09:20 CEST »
0
anche con un file mp3 da 14 secondi ha scaricato un file di solo 12 secondi mancando la fine ora sto provando il metodo che tu mi hai detto

Post unito: 08 Agosto 2013, 09:24:23 CEST
ho modificato cosi la funzione
Codice (Java): [Seleziona]
        private void downloader(String name) throws IOException, IOException {
            String furl= "http://myurl/index.php?mp3="+name;
            try{

                URL url  = new URL(furl);
                URLConnection conexion = url.openConnection();
                conexion.connect();

                int lenghtOfFile = conexion.getContentLength();


                InputStream is = url.openStream();
                OutputStream out = null;
                File testDirectory = new File(Environment.getExternalStorageDirectory()+"/mp3download/");
            if(!testDirectory.exists()){
                testDirectory.mkdir();
            }

            out = new BufferedOutputStream(new FileOutputStream(testDirectory+"/"+name));

                int count = 0;
                byte data[] = new byte[1024];
                while ((count=is.read(data)) != -1)
                        out.write(data, 0, count);

                is.close();
                out.flush();
                out.close();


            }catch(Exception e){
                e.printStackTrace();
            }
    }
ed ora con un file da 26 secondi ha funzionato mentre con un file mp3 da 3 minuti e passa si blocca sempre a circa 40 secondi
« Ultima modifica: 08 Agosto 2013, 09:24:23 CEST da overflow, Reason: Merged DoublePost »

Offline Reinhard

  • Utente junior
  • **
  • Post: 85
  • Respect: +16
    • Google+
    • rspisser
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5 Lollipop 5.1
  • Play Store ID:
    rspisser
  • Sistema operativo:
    Windows 7
Re:Problema download con AsyncDownload
« Risposta #3 il: 08 Agosto 2013, 09:41:21 CEST »
0
ciao,

prova ad usare la libreria Ion (https://github.com/koush/ion); io la uso per le mie app e funziona bene.

Con una istruzione sola fai tutto

Offline overflow

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Huawei G 330
  • Sistema operativo:
    OS X 10.8.4
Re:Problema download con AsyncDownload
« Risposta #4 il: 08 Agosto 2013, 10:00:25 CEST »
0
non ho mai usato librerie esterne potresti aiutarmi ?

Offline Reinhard

  • Utente junior
  • **
  • Post: 85
  • Respect: +16
    • Google+
    • rspisser
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5 Lollipop 5.1
  • Play Store ID:
    rspisser
  • Sistema operativo:
    Windows 7
Re:Problema download con AsyncDownload
« Risposta #5 il: 08 Agosto 2013, 10:28:02 CEST »
0
ciao,

scarica i due jar indicati in fondo al documento https://github.com/koush/ion (sezione Get Ion) e posiziona i due jar nella cartella libs del tuo progetto Android.

Poi puoi iniziare ad usare le librerie

Offline overflow

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Huawei G 330
  • Sistema operativo:
    OS X 10.8.4
Re:Problema download con AsyncDownload
« Risposta #6 il: 08 Agosto 2013, 13:07:36 CEST »
0
ho modificato il codice così ed ora va in crash sarà sicuramente qualche mio errore in quanto mi è poco chiaro come usare questa libreria, potresti aiutarmi ???

Codice (Java): [Seleziona]
 private class AsyncDownload extends AsyncTask<String, String, Void> {
       
        @Override
        protected Void doInBackground(String... urls) {
                // TODO Auto-generated method stub
                HttpClient client = new DefaultHttpClient();
                HttpGet httpGet = new HttpGet(urls[0]);
                try {
                        HttpResponse response = client.execute(httpGet);
                        StatusLine statusLine = response.getStatusLine();
                        int statusCode = statusLine.getStatusCode();
                        if (statusCode == 200) {
                                HttpEntity entity = response.getEntity();
                                InputStream content = entity.getContent();
                                BufferedReader reader = new BufferedReader(
                                new InputStreamReader(content));
                                String line;
                                while ((line = reader.readLine()) != null) {
                                        test.append(line);
                                }
                                String furl= "myurl.com/index.php?mp3="+test.toString();
                                downloading = Ion.with(MainActivity.this, furl)
                                    .progressHandler(new ProgressCallback() {
                                        @Override
                                        public void onProgress(int downloaded, int total) {
                                            txtView.setText("" + downloaded + " / " + total);
                                        }
                                    })
                                    // write to a file
                                    .write(getFileStreamPath("/sdcard/" + test.toString()))
                                    // run a callback on completion
                                    .setCallback(new FutureCallback<File>() {
                                        @Override
                                        public void onCompleted(Exception e, File result) {
                                            if (e != null) {
                                                Toast.makeText(MainActivity.this, "Error downloading file", Toast.LENGTH_LONG).show();
                                                return;
                                            }
                                            Toast.makeText(MainActivity.this, "File download complete", Toast.LENGTH_LONG).show();
                                        }
                                    });
                        } else {
                                test.append("nnt");
                        }
                } catch (ClientProtocolException e) {
                        e.printStackTrace();
                } catch (IOException e) {
                        e.printStackTrace();
                }
               
                return null;
        }
     
        @Override
                protected void onPostExecute(Void unused) {
                Toast.makeText(MainActivity.this, test.toString(),Toast.LENGTH_SHORT).show();
                }      
}
   
}
« Ultima modifica: 08 Agosto 2013, 13:28:48 CEST da overflow »

Offline gabric

  • Utente senior
  • ****
  • Post: 615
  • Respect: +18
    • Google+
    • Mostra profilo
    • Brancato's site
  • Dispositivo Android:
    Nexus 5 / Tablet mediacom s4
  • Play Store ID:
    Brancato's+app
  • Sistema operativo:
    window7. ubuntu
Re:Problema download con AsyncDownload
« Risposta #7 il: 08 Agosto 2013, 14:12:13 CEST »
0
Io con questo codice scarico degli mp3... fino a 3 mega non ho avuto problemi


Codice (Java): [Seleziona]
         url = new URL(linkCanzone);
         conection = url.openConnection();
        conection.connect();
      lenghtOfFile = conection.getContentLength();
       
         //Fine calcolo dimensione file
         
   
      boolean confronto = false;
        while(confronto==false){    
        // input stream to read file - with 8k buffer
        InputStream input = new BufferedInputStream(url.openStream(), 8192);


        File cacheDir=new File(android.os.Environment.getExternalStorageDirectory(),"mp3 Scaricati");
                if(!cacheDir.exists())
                   cacheDir.mkdirs();


                File f=new File(cacheDir,file1);
        // Output stream to write file
        OutputStream output = new FileOutputStream(f);


        byte data[] = new byte[1024];


       


        while ((count = input.read(data)) != -1) {
           total += count;
           // publishing the progress....
           // After this onProgressUpdate will be called
           publishProgress((int)((total*100)/lenghtOfFile));


           // writing data to file
           output.write(data, 0, count);
        }
       
       
       if( f.length()== conection.getContentLength()){
           confronto=true;
        }
         
     
        // flushing output
        output.flush();


        // closing streams
        output.close();
        input.close();
        }


naturalmente ci sono dei riferimenti all'async task e alla progress dialog per mostrare lo stato del download

Offline Reinhard

  • Utente junior
  • **
  • Post: 85
  • Respect: +16
    • Google+
    • rspisser
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5 Lollipop 5.1
  • Play Store ID:
    rspisser
  • Sistema operativo:
    Windows 7
Re:Problema download con AsyncDownload
« Risposta #8 il: 08 Agosto 2013, 15:05:08 CEST »
0
Ciao,

tornando sempre alla libreria, qui c'e' un esempio completo che scarica un file da 100MB (https://github.com/koush/ion/blob/master/ion-sample/src/com/koushikdutta/ion/sample/ProgressBarDownload.java)

Offline overflow

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Huawei G 330
  • Sistema operativo:
    OS X 10.8.4
Re:Problema download con AsyncDownload
« Risposta #9 il: 08 Agosto 2013, 16:47:08 CEST »
0
Ciao,

tornando sempre alla libreria, qui c'e' un esempio completo che scarica un file da 100MB (https://github.com/koush/ion/blob/master/ion-sample/src/com/koushikdutta/ion/sample/ProgressBarDownload.java)

ho usato lo stesso codice dell'esempio se controlli te ne rendi conto ma non mi va


per quanto riguarda questo adesso provo
Io con questo codice scarico degli mp3... fino a 3 mega non ho avuto problemi


Codice (Java): [Seleziona]
         url = new URL(linkCanzone);
         conection = url.openConnection();
        conection.connect();
      lenghtOfFile = conection.getContentLength();
       
         //Fine calcolo dimensione file
         
   
      boolean confronto = false;
        while(confronto==false){    
        // input stream to read file - with 8k buffer
        InputStream input = new BufferedInputStream(url.openStream(), 8192);


        File cacheDir=new File(android.os.Environment.getExternalStorageDirectory(),"mp3 Scaricati");
                if(!cacheDir.exists())
                   cacheDir.mkdirs();


                File f=new File(cacheDir,file1);
        // Output stream to write file
        OutputStream output = new FileOutputStream(f);


        byte data[] = new byte[1024];


       


        while ((count = input.read(data)) != -1) {
           total += count;
           // publishing the progress....
           // After this onProgressUpdate will be called
           publishProgress((int)((total*100)/lenghtOfFile));


           // writing data to file
           output.write(data, 0, count);
        }
       
       
       if( f.length()== conection.getContentLength()){
           confronto=true;
        }
         
     
        // flushing output
        output.flush();


        // closing streams
        output.close();
        input.close();
        }


naturalmente ci sono dei riferimenti all'async task e alla progress dialog per mostrare lo stato del download

Post unito: 09 Agosto 2013, 12:17:58 CEST
sia il mio codice che quello di gabric funziona si tratta solo di un errore del server :/ non me ne ero reso conto fin ora
« Ultima modifica: 09 Agosto 2013, 12:17:58 CEST da overflow, Reason: Merged DoublePost »

Offline lillogoal

  • Utente normale
  • ***
  • Post: 167
  • Respect: +4
    • Google+
    • lillosogliani
    • Mostra profilo
    • LilloNet
  • Dispositivo Android:
    Galaxy s3, Nexus 7,galaxy s advance,galaxy scl
  • Play Store ID:
    Lillonet Inc.
  • Sistema operativo:
    Windows 8,7 & Kali-Linux
Re:Problema download con AsyncDownload
« Risposta #10 il: 29 Agosto 2013, 13:19:14 CEST »
0
Io per il download non ho usato altre librerie una semplice Asynctask e via :)
Chi non progetta la sicurezza , programma il fallimento! K.M