Autore Topic: Lettura da File  (Letto 452 volte)

Offline Laerte

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: 0
    • Mostra profilo
Lettura da File
« il: 08 Marzo 2016, 01:42:57 CET »
0
Buonasera , ho dei file txt su un server FTP , quando vado a leggere i dati a volte mi restituisce dei caratteri errati , ho provato diversi metodi di lettura , chi più spesso , chi meno , mi restituiscono dei caratteri non validi..
Al momento utilizzo questo codice che ho in doInBackground nell'AsyncTask :

Codice (Java): [Seleziona]
                        URL u = null;
                        String name = null;
                        int length = elenco.size();

                        try {
                                for (int i = 0; i < length; i++) {
                                        name = elenco.get(i);

                                        u = new URL(name);
                    HttpURLConnection c = (HttpURLConnection) u.openConnection();
                    c.setRequestMethod("GET");
                    c.connect();
                    InputStream in = c.getInputStream();
                    final ByteArrayOutputStream bo = new ByteArrayOutputStream();
                    byte[] buffer = new byte[1024];
                    int ch;
                    while ((ch = in.read(buffer)) > -1) {
                         bo.write(buffer, 0, ch);
                                        }
             //       in.read(buffer); // Read from Buffer.
               //     bo.write(buffer); // Write Into Buffer
                                       
                    temp3.add(bo.toString("Windows-1252"));
                                        in.close();
                               c.disconnect();
                                        Log.d("GALLERIA", "VEDO TEXT : " + temp3.get(i));
                                }
                        } catch (IOException e) {
                                e.printStackTrace();
                                Log.d("GALLERIA", "ERRORE");
                                return null;
                        }

                        return temp3;
               
A volte mi restituisce una cosa del genere
Codice (Java): [Seleziona]
"‹????????????óÌK/MÎÌL¶±3400°±??Ñšà??????"  , specialmente se faccio velocemente avente e indietro tra un activity e l'altra (ma non necessariamente) è una questione di connessione ?

Accetto consigli,grazie.
« Ultima modifica: 08 Marzo 2016, 15:10:50 CET da Laerte »

Offline dev91

  • Utente junior
  • **
  • Post: 51
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Note 4
Re:Lettura da File
« Risposta #1 il: 08 Marzo 2016, 02:15:30 CET »
0
Buonasera , ho dei file txt su un server FTP , quando vado a leggere i dati a volte mi restituisce dei caratteri errati , ho provato diversi metodi di lettura , chi più spesso , chi meno , mi restituiscono dei caratteri non validi..
Al momento utilizzo questo codice che ho in doInBackground nell'AsyncTask :

Codice (Java): [Seleziona]
                        URL u = null;
                        String name = null;
                        int length = elenco.size();

                        try {
                                for (int i = 0; i < length; i++) {
                                        name = elenco.get(i);

                                        u = new URL(name);
                    HttpURLConnection c = (HttpURLConnection) u.openConnection();
                    c.setRequestMethod("GET");
                    c.connect();
                    InputStream in = c.getInputStream();
                    final ByteArrayOutputStream bo = new ByteArrayOutputStream();
                    byte[] buffer = new byte[1024];
                    int ch;
                    while ((ch = in.read(buffer)) > -1) {
                         bo.write(buffer, 0, ch);
                                        }
             //       in.read(buffer); // Read from Buffer.
               //     bo.write(buffer); // Write Into Buffer
                                       
                    temp3.add(bo.toString("Windows-1252"));
                                        in.close();
                                        Log.d("GALLERIA", "VEDO TEXT : " + temp3.get(i));
                                }
                        } catch (IOException e) {
                                e.printStackTrace();
                                Log.d("GALLERIA", "ERRORE");
                                return null;
                        }

                        return temp3;
               
A volte mi restituisce una cosa del genere
Codice (Java): [Seleziona]
"‹????????????óÌK/MÎÌL¶±3400°±??Ñšà??????"  , specialmente se faccio velocemente avente e indietro tra un activity e l'altra (ma non necessariamente) è una questione di connessione ?

Accetto consigli,grazie.
In software come Filezilla, puoi cambiare la modalità di trasferimento tra binaria ed ASCII (se non ricordo male).  Prova a cambiare impostazione ed a rileggere il file che andrai ad uppare sull'FTP.

Inviato dal mio SM-T705 utilizzando Tapatalk


Offline Laerte

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: 0
    • Mostra profilo
Re:Lettura da File
« Risposta #2 il: 08 Marzo 2016, 11:03:53 CET »
0
In software come Filezilla, puoi cambiare la modalità di trasferimento tra binaria ed ASCII (se non ricordo male).  Prova a cambiare impostazione ed a rileggere il file che andrai ad uppare sull'FTP.

Inviato dal mio SM-T705 utilizzando Tapatalk

Grazie per la risposta, ma questi file txt sono generati da un pagina PHP a cui invio le stringhe in questo modo :

Codice (Java): [Seleziona]
                        try {
                                URL url = new URL("http://sito/pagine.php");
                                HttpURLConnection conn = (HttpURLConnection) url
                                                .openConnection();
                                conn.setRequestMethod("POST");

                                // para activar el metodo post
                                conn.setDoOutput(true);
                                conn.setDoInput(true);
                                DataOutputStream wr = new DataOutputStream(
                                                conn.getOutputStream());
                                //wr.writeBytes("name=" + text);
                       
                                wr.writeBytes("title=" + fileName+"&name=" + text+"&prezzo=" + prez);
                                wr.flush();

                                wr.close();

                                InputStream is = conn.getInputStream();
                                BufferedReader rd = new BufferedReader(
                                                new InputStreamReader(is));
                                String line;
                                StringBuffer response = new StringBuffer();
                                while ((line = rd.readLine()) != null) {
                                        response.append(line);
                                        response.append('\r');
                                }
                                rd.close();
                        } catch (Exception e) {
                        }

                       
               

Le stesse stringhe dai diversi file che gia stanno sul server magari l'80% delle volte me li legge tutti bene, poi invece capita che ad un tratto una stringa me la legga male.
A me comunque serve di caricare delle stringhe sul server e di leggerle, cosi ho creato questi txt (un txt per ogni immagine che uppo tramite FTP cosi avevo pensato a creare questi txt).

La pagina php in questione è la seguente:
Codice (Java): [Seleziona]
<?php
 // receive data from app's http request
 $data=$_POST["name"];
 $title=$_POST["title"];
 $prezzo=$_POST["prezzo"];
 // write data from my android app to a text file
 file_put_contents("$title.txt",$data."<>".$prezzo."<>");
?>

Post unito: [time]08 Marzo 2016, 14:33:45 CET[/time]
Adesso questo problema me lo da subito la seconda volta che provo a scaricare le stringhe.

Post unito: [time]08 Marzo 2016, 15:23:06 CET[/time]
Ho aggiunto il TRY/CATCH anche alla disconnessione di HttpURLConnection ,ma da sempre lo stesso problema:

Codice (Java): [Seleziona]
@Override
                protected ArrayList<String> doInBackground(Void... arg0) {
                        URL u = null;
                        String name = null;
                        int length = elenco.size();
                        HttpURLConnection c;
                        ByteArrayOutputStream bo;
                        for (int i = 0; i < length; i++) {
                                try {

                                        name = elenco.get(i);

                                        u = new URL(name);
                                        c = (HttpURLConnection) u.openConnection();
                                        c.setRequestMethod("GET");
                                        c.connect();
                                        InputStream in = c.getInputStream();
                                        bo = new ByteArrayOutputStream();
                                        byte[] buffer = new byte[1024];
                                        int ch;
                                        while ((ch = in.read(buffer)) > -1) {
                                                bo.write(buffer, 0, ch);
                                        }
                                        // in.read(buffer); // Read from Buffer.
                                        // bo.write(buffer); // Write Into Buffer

                                        in.close();
                                } catch (IOException e) {
                                        e.printStackTrace();
                                        Log.d("GALLERIA", "ERRORE");
                                        return null;
                                }
                                try {
                                        if (c != null) {
                                                temp3.add(bo.toString("Windows-1252"));
                        Log.d("GALLERIA", "VEDO TEXT : " + temp3.get(i));

                                                c.disconnect();
                                                Log.d("GALLERIA", "DISCONNESSO");

                                        }
                                } catch (Exception e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                        Log.d("GALLERIA", "ERRORE DISCONNESSIONE");
                                }
                        }
                        return temp3;
                }

Post unito: [time]08 Marzo 2016, 15:43:36 CET[/time]
Finalmente credo di aver risolto in questa maniera:

Codice (Java): [Seleziona]
        @Override
                protected ArrayList<String> doInBackground(Void... arg0) {
                        String name = null;
                        int length = elenco.size();
                        HttpURLConnection urlConnection = null;
                       
                        for (int i = 0; i < length; i++) {
                                 try {
                                                String result = "";

                                         name = elenco.get(i);
                                    URL url = new URL(name);
                                    urlConnection = (HttpURLConnection) url.openConnection();

                                    int code = urlConnection.getResponseCode();

                                    if(code==200){
                                        InputStream in = new BufferedInputStream(urlConnection.getInputStream());
                                        if (in != null) {
                                            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in));
                                            String line = "";

                                            while ((line = bufferedReader.readLine()) != null)
                                                result += line;
                                        }
                                           
                                        in.close();
                                    }
                                    temp3.add(result);
                                    Log.d("GALLERIA", "VEDO TEXT : " + temp3.get(i));
                                } catch (MalformedURLException e) {
                                    e.printStackTrace();
                                } catch (IOException e) {
                                    e.printStackTrace();
                                }

                                finally {
                                    urlConnection.disconnect();
                                }
                        }
                        return temp3;
                }

Post unito: 08 Marzo 2016, 17:36:48 CET
A volte ancora mi da quel problema, ma molto piu raramente.. . . può dipendere dalla connessione internet?
Magari in un determinato momento prende male e fa in quel modo?
Inoltre stavo pensando...visto che se quando sto scaricando i file nell'AsyncTasck va via la connessione mi crasha l'App, non c'è modo invece di farla crashare di farla tornare all'activity successiva tramite onBackPressed ?
Grazie
« Ultima modifica: 08 Marzo 2016, 17:36:48 CET da Laerte, Reason: Merged DoublePost »