Autore Topic: form di una activity visualizzato dopo la fine di una void e non dall'inizio.  (Letto 462 volte)

Offline fieraf

  • Utente junior
  • **
  • Post: 88
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy s 2
  • Sistema operativo:
    windows 7
Ciao Ragazzi.
la mia applicazione ha due activity.
nella prima ho un bottone che lancia una seconda act. che ha una textview nella quale ci sono i messaggi di controllo di una connessione ftp,e nel metodo onResume, si connette a un server ftp per inviare dei files.
Tutto funziona, ma il form della seconda act. solo si visualizza alla fine del processo ftp.

Perché?
come posso fare per visualizzare il form dell'activity  sin dall'inizio ?

grazie

Offline Luigi.Arena

  • Utente senior
  • ****
  • Post: 616
  • DACIA DUSTER 4X4 SUPER
  • Respect: +56
    • Mostra profilo
    • ArenaWebTest
  • Dispositivo Android:
    epad m009
  • Play Store ID:
    Luigi Arena
  • Sistema operativo:
    Windows 7
Re:form di una activity visualizzato dopo la fine di una void e non dall'inizio.
« Risposta #1 il: 23 Febbraio 2012, 15:02:46 CET »
0
Posta il codice della seconda activity.
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato .

Offline fieraf

  • Utente junior
  • **
  • Post: 88
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy s 2
  • Sistema operativo:
    windows 7
Re:form di una activity visualizzato dopo la fine di una void e non dall'inizio.
« Risposta #2 il: 23 Febbraio 2012, 15:59:48 CET »
0
ecco:

Codice (Java): [Seleziona]
package gpstrat.android;



import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.net.InetAddress;
import java.net.SocketException;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Environment;
import android.view.KeyEvent;
import android.widget.TextView;

public class FtpClient extends Activity {
        private String db;
        private File Dir;
         @Override
         protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.ftp);
                Intent intent=getIntent(); // l'intent di questa activity
                String pkg=getPackageName();   
                db=intent.getStringExtra(pkg+".nomedb") ;
               
   }
       
         @Override
         protected void onResume() {
                 super.onResume();
                 int numfiles=1;
                 TextView risposta = (TextView) findViewById(R.id.RispostaServer);
            boolean upload_ok;
                FileInputStream fis;
                File DirFoto = new File(Environment.getExternalStorageDirectory(),"GPStrat/"+db +File.separatorChar+"Pictures");
                Dir = new File(Environment.getExternalStorageDirectory(),"GPStrat/"+db);
                File[] files=DirFoto.listFiles();
                for (File f : files) {
                        if (f.isFile()) {
                                numfiles+=1;
                        }
                }
        risposta.append("....Files to send: " +numfiles+"\n");
     
                //Il seguente codice dovrebbe implementare l'upload del file verso il server ftp
     
                FTPClient client= new FTPClient();

                try {
                        InetAddress indirizzo = InetAddress.getByName("+++++++");
                        client.connect(indirizzo);
                        risposta.append(client.getReplyString()+"\n");
                                //aperta la connessione al server procedo al login

                                boolean loggato=client.login("+++++", "+++++");
                                if(loggato==true)
                                {
                                        risposta.append(" ....login successful\n");
                                        FTPFile[] FtpFiles=client.listFiles();
                                        //apro il file contenuto nel path /sdcard come stream
                                        client.setFileType(FTP.BINARY_FILE_TYPE); // imposto il tipo di dati, da modificare a seconda dell'utilità
                                        File file = new File(Dir,"DB_"+db+".txt");
                                         fis = new FileInputStream(file);//creo uno stream in input a partire dal mio file
                                        risposta.append("....File to be send: " + db+".txt\n");
                                        upload_ok=client.storeFile("DB_prova.txt", fis);
                                        fis.close();//procedo alla chiusura dello stream, infatti storeFile non chiude fis
                                        if(upload_ok==true)
                                        {
                                                 risposta.append("  ..... upload ok\n");
                                                //ScriviFileLogFtp("DB_" +db+ ".txt");
                                    }else{
                                                risposta.append("....upload failed, error: " + upload_ok+"\n");
                                                ScriviFileLogFtp("DB_" +db+ ".txt");
                                        }
                                        //risposta.append("...path file: " + file.getPath()); //questa istruzione la usavo per test, la lascio casomai dovesse servire, stampa semplicemente il path del file che voglio uploadare

                                        for (File f : files) {
                                                if (f.isFile()) {
                                                        risposta.append("....File to be send: " + f.getName()+"\n");   
                                                         fis = new FileInputStream(f);
                                                        upload_ok=client.storeFile(f.getName(),fis);

                                                        fis.close();//procedo alla chiusura dello stream, infatti storeFile non chiude fis
                                                        if(upload_ok==true)
                                                        {
                                                                risposta.append("  ..... upload ok\n");
                                                                //ScriviFileLogFtp(f.getName());
                                                        }
                                                        else{
                                                                risposta.append("....upload failed, error: " + upload_ok+"\n");
                                                                ScriviFileLogFtp(f.getName());
                                                        }
                                                }
                                        }      
               
                                }else{
                                        risposta.append("...login failed");
                                   
                                }              
                                client.logout();
                                client.disconnect();
                                if (client.logout()){
                                        risposta.append("....Client disconnected successful"); 
                                }else{
                                        risposta.append("....Client disconnected failed");     
                                }

                                File file = new File(Dir,"DB_"+db+".txt");
                                file.delete();
                        } catch (SocketException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }                
               
         }
         
         @Override
            protected void onPause() {
                 super.onPause();
         }
           
            @Override
                public boolean onKeyDown(int keyCode, KeyEvent event) {
                if ((keyCode == KeyEvent.KEYCODE_BACK)) {

                        this.finish() ;
                }
                return super.onKeyDown(keyCode, event);
            }
            public void ScriviFileLogFtp(String filename){
                File file1=new File(Dir,"LogFtp.txt");         
                FileWriter fw=null;
                try {
                        if (!file1.exists())
                                {
                                        file1.createNewFile();
                                }
                         fw = new FileWriter(file1,true);  
                        fw.write(filename+"\n");
                                 fw.flush();   
                        } catch (IOException e) {
                                                // TODO Auto-generated catch block
                                e.printStackTrace();
                }finally{
                    // En el finally cerramos el fichero, para asegurarnos
                    // que se cierra tanto si todo va bien como si salta
                    // una excepcion.
                    try{                    
                       if( null != fw ){  
                          fw.close();    
                       }                  
                    }catch (Exception e2){
                       e2.printStackTrace();
                    }
                 }
            }
}

Offline Luigi.Arena

  • Utente senior
  • ****
  • Post: 616
  • DACIA DUSTER 4X4 SUPER
  • Respect: +56
    • Mostra profilo
    • ArenaWebTest
  • Dispositivo Android:
    epad m009
  • Play Store ID:
    Luigi Arena
  • Sistema operativo:
    Windows 7
Re:form di una activity visualizzato dopo la fine di una void e non dall'inizio.
« Risposta #3 il: 23 Febbraio 2012, 16:11:11 CET »
0
Questo è un mio giudizio personale:

1)Tutto il codice che invia il file lo metterei in un thread separato.
2)
Citazione
Intent intent=getIntent(); // l'intent di questa activity
                String pkg=getPackageName();   
                db=intent.getStringExtra(pkg+".nomedb") ;
Per cosa lo usi ?(scusa la mia ignoranza)

3)Il metodo on resume l'hai implementato nel caso esci dall'activity ?

È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato .

Offline fieraf

  • Utente junior
  • **
  • Post: 88
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy s 2
  • Sistema operativo:
    windows 7
Re:form di una activity visualizzato dopo la fine di una void e non dall'inizio.
« Risposta #4 il: 23 Febbraio 2012, 16:21:58 CET »
0
Citazione
Tutto il codice che invia il file lo metterei in un thread separato

Come si fa?sono nuovo di android

Citazione
Citazione
Intent intent=getIntent(); // l'intent di questa activity
                String pkg=getPackageName();   
                db=intent.getStringExtra(pkg+".nomedb

Per cosa lo usi ?(scusa la mia ignoranza)

Gli passo un nome di u  database selezionato nella prima activity

Citazione
Il metodo on resume l'hai implementato nel caso esci dall'activity ?

Cosa significa?

Grazie

Offline Luigi.Arena

  • Utente senior
  • ****
  • Post: 616
  • DACIA DUSTER 4X4 SUPER
  • Respect: +56
    • Mostra profilo
    • ArenaWebTest
  • Dispositivo Android:
    epad m009
  • Play Store ID:
    Luigi Arena
  • Sistema operativo:
    Windows 7
Re:form di una activity visualizzato dopo la fine di una void e non dall'inizio.
« Risposta #5 il: 23 Febbraio 2012, 16:31:39 CET »
0
I thread sono presenti quasi in ogni linguaggio di programmazione.
Se cerchi nel forum troverai parecchie informazioni, cerca anche task.

Domanda 2:
Ho capito che è un valore che gli passi all'activty, ma mi chiedevo dove lo utilizzavi

Domanda 3:
Scrivendo quella porzione di codice nel metodo Resume() cosa dovresti ottenere ?perchè hai scritto del codice in quel metodo ?
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato .

Offline fieraf

  • Utente junior
  • **
  • Post: 88
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy s 2
  • Sistema operativo:
    windows 7
Re:form di una activity visualizzato dopo la fine di una void e non dall'inizio.
« Risposta #6 il: 23 Febbraio 2012, 16:42:21 CET »
0
ok. ti spiego:

Citazione
I thread sono presenti quasi in ogni linguaggio di programmazione.
Se cerchi nel forum troverai parecchie informazioni, cerca anche task.

ho scritto:
Codice (Java): [Seleziona]
public MiHilo extends Thread
 {
    public void run()
    {
       // qui il codice che avevo nel onresume
    }
}

         @Override
         protected void onResume() {
                 super.onResume();
                 MiHilo elHilo = new MiHilo();
                 elHilo.start();

         }
pero mi da queti errori:

Codice: [Seleziona]
02-23 16:40:31.480: E/AndroidRuntime(9239): FATAL EXCEPTION: Thread-10
02-23 16:40:31.480: E/AndroidRuntime(9239): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
02-23 16:40:31.480: E/AndroidRuntime(9239):         at android.view.ViewRoot.checkThread(ViewRoot.java:3237)
02-23 16:40:31.480: E/AndroidRuntime(9239):         at android.view.ViewRoot.invalidateChild(ViewRoot.java:761)
02-23 16:40:31.480: E/AndroidRuntime(9239):         at android.view.ViewRoot.invalidateChildInParent(ViewRoot.java:787)
02-23 16:40:31.480: E/AndroidRuntime(9239):         at android.view.ViewGroup.invalidateChild(ViewGroup.java:2511)
02-23 16:40:31.480: E/AndroidRuntime(9239):         at android.view.View.invalidate(View.java:5498)
02-23 16:40:31.480: E/AndroidRuntime(9239):         at android.widget.TextView.updateAfterEdit(TextView.java:5266)
02-23 16:40:31.480: E/AndroidRuntime(9239):         at android.widget.TextView.handleTextChanged(TextView.java:6779)
02-23 16:40:31.480: E/AndroidRuntime(9239):         at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:6937)
02-23 16:40:31.480: E/AndroidRuntime(9239):         at android.text.SpannableStringBuilder.sendTextChange(SpannableStringBuilder.java:913)
02-23 16:40:31.480: E/AndroidRuntime(9239):         at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:352)
02-23 16:40:31.480: E/AndroidRuntime(9239):         at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:269)
02-23 16:40:31.480: E/AndroidRuntime(9239):         at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:432)
02-23 16:40:31.480: E/AndroidRuntime(9239):         at android.text.SpannableStringBuilder.append(SpannableStringBuilder.java:259)
02-23 16:40:31.480: E/AndroidRuntime(9239):         at android.text.SpannableStringBuilder.append(SpannableStringBuilder.java:28)
02-23 16:40:31.480: E/AndroidRuntime(9239):         at android.widget.TextView.append(TextView.java:2435)
02-23 16:40:31.480: E/AndroidRuntime(9239):         at android.widget.TextView.append(TextView.java:2422)
02-23 16:40:31.480: E/AndroidRuntime(9239):         at gpstrat.android.FtpClient$MiHilo.run(FtpClient.java:109)


Citazione
Domanda 2:
Ho capito che è un valore che gli passi all'activty, ma mi chiedevo dove lo utilizzavi

Per ricavare la directori dei file per lo specifico db vedasi
File DirFoto = new File(Environment.getExternalStorageDirectory(),"GPStrat/"+db

Citazione
Domanda 3:
Scrivendo quella porzione di codice nel metodo Resume() cosa dovresti ottenere ?perchè hai scritto del codice in quel metodo ?

la activity ha un form con una textview (TextView risposta = (TextView) findViewById(R.id.RispostaServer)) che mostra la varie fasi del ftp e volevo che quando dalla prima activity lanciavo la seconda si aprisse il form che mi fa vedere le fasi del ftp