Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [Android] Problema con richiesta internet

    ciao!

    in una classe AsyncTask, lancio questo:
    codice:
    public class DownloadFile {
    
        public void download(String remoteFile, String localFile) throws IOException {
            URL url = new URL(Const.URL_SERVICE + remoteFile);
            URLConnection connection = url.openConnection();
            System.out.println("OK");
            connection.connect();
            InputStream input = new BufferedInputStream(url.openStream());
            OutputStream output = new FileOutputStream(localFile);
            System.out.println("OK 2");
            byte data[] = new byte[1024];
            System.out.println("DATA: " + Arrays.toString(data));
            int count;
            while ((count = input.read(data)) != -1) {
                output.write(data, 0, count);
            }
            output.flush();
            output.close();
            input.close();
        }
    
    }
    ho piazzato tre System.out, ma solo il primo si vede nel logcat.
    infatti il file che dovrebbe essere creato, non viene creato.
    l'url della richiesta è giusto, ed è un file xml remoto.
    avete qualche idea??

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Come valorizzi il parametro "localFile"?
    Ad ogni modo, metti delle stampe anche appena dopo la connessione (per verificare che vada a buon fine).
    Immagino, comunque, che non vi siano eccezioni nel LogCat... hai correttamente gestito l'eventuale eccezione che quel metodo rilancia?


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    ciao!!

    allora, loaclFile sostanzialmente è questo:
    codice:
    public class Const {
    
        public static String LOCAL_PATH = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "CIMODA" + File.separator;
        public static String XML_CLIENTI = LOCAL_PATH + "clienti.xml";
    }
    ho messo anche un altro System.out:
    codice:
    public class DownloadFile {
    
        public void download(String remoteFile, String localFile) throws IOException {
            URL url = new URL(Const.URL_SERVICE + remoteFile);
            URLConnection connection = url.openConnection();
            System.out.println("OK");
            connection.connect();
            System.out.println("OK CONNESSIONE");
            InputStream input = new BufferedInputStream(url.openStream());
            OutputStream output = new FileOutputStream(localFile);
            System.out.println("OK 2");
            byte data[] = new byte[1024];
            System.out.println("DATA: " + Arrays.toString(data));
            int count;
            while ((count = input.read(data)) != -1) {
                output.write(data, 0, count);
            }
            output.flush();
            output.close();
            input.close();
        }
    
    }
    praticamente nel log vedo questo:
    codice:
    11:44:57.018 869 it.cimoda INFO System.out OK
    11:44:57.118 869 it.cimoda INFO System.out OK CONNESSIONE
    11:44:57.708 277 system_process WARN InputMethodManagerService Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@411e3518 attribute=null, token = android.os.BinderProxy@40eca080
    e li finisce.

    poi dopo circa 20 secondi dalla chiusura del task asincrono, ottengo diverso altro output.
    però forse lo esaminerei come ultima risorsa perchè a occhio sembra non c'entri nulla.

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Fai vedere la parte in cui richiami il metodo download().


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    allora.

    il fatto è questo.
    è una app che uso in ufficio, e alla quale dovevo fare una modifica e che non ha mai dato problemi.
    ho installato oggi l'sdk su windows 7 e creato l'emulatore.
    sull'emulatore non funziona, ma installata sul device fisico si.

    quindi può essere un problema dell'emulatore piuttosto che della app?

    cmq ti posto il codice che mi hai richiesto.
    alla pressione della voce del menu:
    codice:
    public class DownloadDatas extends AsyncTask<Object, Object, Object> {
    
            private ProgressDialog pd = new ProgressDialog(MainActivity.this);
            private DownloadFile df = new DownloadFile();
            private Service s = new Service();
    
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                pd.setMessage("Loading...");
                pd.show();
            }
    
            @Override
            protected Object doInBackground(Object... params) {
                try {
                    s.launchService("clienti_b2b");
                    df.download("clienti.xml", Const.XML_CLIENTI);
                } catch (IOException e) {
                } catch (JSONException e) {
                }
                return null;
            }
    
            @Override
            protected void onPostExecute(Object result) {
                super.onPostExecute(result);
                setLista();
                adapter.notifyDataSetChanged();
                pd.dismiss();
            }
        }
    prima lancio una procedura remota che crea il file sul server.
    poi scarico il file sul device / emulatore.

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Questo non lo so, visto che stai ammazzando le eccezioni.
    Se succede qualcosa per cui va in errore, non te ne accorgerai mai in quel modo.

    Nei rami catch() aggiungi la stampa dell'eccezione:

    codice:
    Log.e("DownloadDatas", "Errore durante il download", e);

    Ad ogni modo, l'emulatore di per sé può avere delle limitazioni... ma è solo stampando le eccezioni che puoi capire se è un errore "trascurabile" in questa fase (uso dell'emulatore) o se c'è dell'altro.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    pure te hai in effetti ragione.
    quindi, avendo messo il log sui catch, alla pressione del tasto:

    codice:
    13:11:42.068    36    #36    ERROR    SurfaceFlinger    ro.sf.lcd_density must be defined as a build property
    13:11:44.878    277    system_process    ERROR    ThrottleService    problem during onPollAlarm: java.lang.IllegalStateException: problem parsing stats: java.io.FileNotFoundException: /proc/net/xt_qtaguid/iface_stat_all: open failed: ENOENT (No such file or directory)
    13:11:57.207    852    it.cimoda    ERROR    DownloadDatas    Errore durante il download
    13:11:57.207    852    it.cimoda    ERROR    DownloadDatas    java.io.FileNotFoundException: /mnt/sdcard/CIMODA/clienti.xml: open failed: EACCES (Permission denied)
    13:11:57.207    852    it.cimoda    ERROR    DownloadDatas       at libcore.io.IoBridge.open(IoBridge.java:416)
    13:11:57.207    852    it.cimoda    ERROR    DownloadDatas       at java.io.FileOutputStream.(FileOutputStream.java:88)
    13:11:57.207    852    it.cimoda    ERROR    DownloadDatas       at java.io.FileOutputStream.(FileOutputStream.java:128)
    13:11:57.207    852    it.cimoda    ERROR    DownloadDatas       at java.io.FileOutputStream.(FileOutputStream.java:117)
    13:11:57.207    852    it.cimoda    ERROR    DownloadDatas       at it.cimoda.DownloadFile.download(DownloadFile.java:18)
    13:11:57.207    852    it.cimoda    ERROR    DownloadDatas       at it.cimoda.MainActivity$DownloadDatas.doInBackground(MainActivity.java:147)
    13:11:57.207    852    it.cimoda    ERROR    DownloadDatas       at android.os.AsyncTask$2.call(AsyncTask.java:287)
    13:11:57.207    852    it.cimoda    ERROR    DownloadDatas       at java.util.concurrent.FutureTask.run(FutureTask.java:234)
    13:11:57.207    852    it.cimoda    ERROR    DownloadDatas       at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
    13:11:57.207    852    it.cimoda    ERROR    DownloadDatas       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
    13:11:57.207    852    it.cimoda    ERROR    DownloadDatas       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
    13:11:57.207    852    it.cimoda    ERROR    DownloadDatas       at java.lang.Thread.run(Thread.java:856)
    13:11:57.207    852    it.cimoda    ERROR    DownloadDatas    Caused by: libcore.io.ErrnoException: open failed: EACCES (Permission denied)
    13:11:57.207    852    it.cimoda    ERROR    DownloadDatas       at libcore.io.Posix.open(Native Method)
    13:11:57.207    852    it.cimoda    ERROR    DownloadDatas       at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
    13:11:57.207    852    it.cimoda    ERROR    DownloadDatas       at libcore.io.IoBridge.open(IoBridge.java:400)
    13:11:57.207    852    it.cimoda    ERROR    DownloadDatas       ... 11 more
    Ultima modifica di LeleFT; 20-01-2015 a 15:35

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Permission denied.
    Forse nel manifest ti manca la permission:

    codice:
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    i permessi c'erano, ma l'emulatore non aveva creato la sd card virtuale e quindi non creava il file.
    fatto questo ha funzionato tutto.

    grazie mille per i consigli!!!

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Sì, infatti... se non ci fosse stata la permission avresti avuto problemi anche nel device fisico, ma precedentemente avevi detto che lì funzionava. Buono così.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.