Autore Topic: Problema libreria FTP  (Letto 922 volte)

Offline cyber_devil

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Nexus S CyanogenMod 10
  • Sistema operativo:
    Windows 7
Problema libreria FTP
« il: 02 Dicembre 2012, 11:27:18 CET »
0
Buongiorno a tutti, stò implementando una applicazione che dovrebbe collegarsi ad un server FTP ed effettuare varie operazioni di upload/download. Stò utilizzando le librerie ftp4j, ma nel momento in cui eseguo l'applicazione ho un errore. Premetto che il manifest contiene i permessi relativi.

Questa è la classe che utilizza i metodi della libreria ftp:
Codice: [Seleziona]
public class GestFTP {
       
        public static boolean isConnesso(){
               
                    FTPClient f=new FTPClient();
                    try {
                                        f.connect(server);
                                        f.login(username, password);
                                        f.disconnect(true);
                                        return true;
                                } catch (IllegalStateException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                        return false;
                                } catch (IOException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                        return false;
                                } catch (FTPIllegalReplyException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                        return false;
                                } catch (FTPException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                        return false;
                                }
          }

}

Questo è il file di LOG:

Codice: [Seleziona]
12-02 11:19:46.144: E/AndroidRuntime(5574): FATAL EXCEPTION: main
12-02 11:19:46.144: E/AndroidRuntime(5574): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.prova/com.example.prova.MainActivity}: android.os.NetworkOnMainThreadException
12-02 11:19:46.144: E/AndroidRuntime(5574):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
12-02 11:19:46.144: E/AndroidRuntime(5574):         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
12-02 11:19:46.144: E/AndroidRuntime(5574):         at android.app.ActivityThread.access$600(ActivityThread.java:130)
12-02 11:19:46.144: E/AndroidRuntime(5574):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
12-02 11:19:46.144: E/AndroidRuntime(5574):         at android.os.Handler.dispatchMessage(Handler.java:99)
12-02 11:19:46.144: E/AndroidRuntime(5574):         at android.os.Looper.loop(Looper.java:137)
12-02 11:19:46.144: E/AndroidRuntime(5574):         at android.app.ActivityThread.main(ActivityThread.java:4745)
12-02 11:19:46.144: E/AndroidRuntime(5574):         at java.lang.reflect.Method.invokeNative(Native Method)
12-02 11:19:46.144: E/AndroidRuntime(5574):         at java.lang.reflect.Method.invoke(Method.java:511)
12-02 11:19:46.144: E/AndroidRuntime(5574):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
12-02 11:19:46.144: E/AndroidRuntime(5574):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
12-02 11:19:46.144: E/AndroidRuntime(5574):         at dalvik.system.NativeStart.main(Native Method)
12-02 11:19:46.144: E/AndroidRuntime(5574): Caused by: android.os.NetworkOnMainThreadException
12-02 11:19:46.144: E/AndroidRuntime(5574):         at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
12-02 11:19:46.144: E/AndroidRuntime(5574):         at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
12-02 11:19:46.144: E/AndroidRuntime(5574):         at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
12-02 11:19:46.144: E/AndroidRuntime(5574):         at java.net.InetAddress.getByName(InetAddress.java:289)
12-02 11:19:46.144: E/AndroidRuntime(5574):         at java.net.InetSocketAddress.<init>(InetSocketAddress.java:105)
12-02 11:19:46.144: E/AndroidRuntime(5574):         at java.net.InetSocketAddress.<init>(InetSocketAddress.java:90)
12-02 11:19:46.144: E/AndroidRuntime(5574):         at it.sauronsoftware.ftp4j.FTPConnector.tcpConnectForCommunicationChannel(FTPConnector.java:208)
12-02 11:19:46.144: E/AndroidRuntime(5574):         at it.sauronsoftware.ftp4j.connectors.DirectConnector.connectForCommunicationChannel(DirectConnector.java:39)
12-02 11:19:46.144: E/AndroidRuntime(5574):         at it.sauronsoftware.ftp4j.FTPClient.connect(FTPClient.java:1036)
12-02 11:19:46.144: E/AndroidRuntime(5574):         at it.sauronsoftware.ftp4j.FTPClient.connect(FTPClient.java:1003)
12-02 11:19:46.144: E/AndroidRuntime(5574):         at com.example.prova.GestFTP.isConnesso(GestFTP.java:21)
12-02 11:19:46.144: E/AndroidRuntime(5574):         at com.example.prova.MainActivity.onCreate(MainActivity.java:15)
12-02 11:19:46.144: E/AndroidRuntime(5574):         at android.app.Activity.performCreate(Activity.java:5008)
12-02 11:19:46.144: E/AndroidRuntime(5574):         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
12-02 11:19:46.144: E/AndroidRuntime(5574):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
12-02 11:19:46.144: E/AndroidRuntime(5574):         ... 11 more

Grazie a chi cercherà di rispondermi :)


p.s. ho seguito anche la guida con relativa libreria presente nel forum, ma ho lo stesso problema

Offline IacopoDeeNosee

  • Utente junior
  • **
  • Post: 128
  • Respect: +33
    • Google+
    • iacopodeenosee
    • Mostra profilo
    • visualhunter
  • Dispositivo Android:
    Samsung Nexus S - GT-I9023
  • Play Store ID:
    IacopoDeeNosee
  • Sistema operativo:
    Arch linux x86_64
Re:Problema libreria FTP
« Risposta #1 il: 02 Dicembre 2012, 11:39:34 CET »
0
non hai messo il resto del codice ma dal logcat pare che devi fare la chiamata al ftp da dentro un thread diverso dal thread della UI,ti consiglio per la sua semplicità di usare un AsyncTask,dai un occhio anche a  questo: Android Developers Blog: Painless threading
8y3

Offline cyber_devil

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Nexus S CyanogenMod 10
  • Sistema operativo:
    Windows 7
Re:Problema libreria FTP
« Risposta #2 il: 02 Dicembre 2012, 17:30:16 CET »
0
Si ecco, mi funziona. Sia tramite Thread che AsyncTask. Mi sapresti dire il perchè? Nella guida presente su questo forum non si parla di questo problema? Devo publicare tutto il log?

Offline IacopoDeeNosee

  • Utente junior
  • **
  • Post: 128
  • Respect: +33
    • Google+
    • iacopodeenosee
    • Mostra profilo
    • visualhunter
  • Dispositivo Android:
    Samsung Nexus S - GT-I9023
  • Play Store ID:
    IacopoDeeNosee
  • Sistema operativo:
    Arch linux x86_64
Re:Problema libreria FTP
« Risposta #3 il: 02 Dicembre 2012, 18:12:01 CET »
0
per una questione di design, prima di honeycomb era consigliato fare i lavori pesanti/bloccanti su di un thread differente da quello dell UI per evitare possibili ANR(Application Not Responding), da honeycomb in poi viene proprio impedito questo generando un exception a run-time,se vuoi approfondire puoi trovare altri post nel forum a riguardo o anche nelle reference: Keeping Your App Responsive | Android Developers
NetworkOnMainThreadException | Android Developers
8y3

Offline cyber_devil

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Nexus S CyanogenMod 10
  • Sistema operativo:
    Windows 7
Re:Problema libreria FTP
« Risposta #4 il: 02 Dicembre 2012, 18:53:58 CET »
0
Ok, grazie per la tua rapida risposta  :-)