Autore Topic: Caricamento di una foto su server con FTPClient  (Letto 824 volte)

Offline Ivan86

  • Utente junior
  • **
  • Post: 139
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S II
  • Sistema operativo:
    Windows 7
Caricamento di una foto su server con FTPClient
« il: 01 Aprile 2013, 12:37:03 CEST »
0
Ciao.

Sto implementando quanto segue:
- Scatto di una foto
- Caricamento della stessa in una cartella del mio server

La foto la carico correttamente su dispositivo, al momento della connessione FTPClient riscontro il seguente problema:
Codice: [Seleziona]
E/AndroidRuntime(18799): FATAL EXCEPTION: AsyncTask #3
E/AndroidRuntime(18799): java.lang.RuntimeException: An error occured while executing doInBackground()
E/AndroidRuntime(18799):        at android.os.AsyncTask$3.done(AsyncTask.java:299)
E/AndroidRuntime(18799):        at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
E/AndroidRuntime(18799):        at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
E/AndroidRuntime(18799):        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
E/AndroidRuntime(18799):        at java.util.concurrent.FutureTask.run(FutureTask.java:137)
E/AndroidRuntime(18799):        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
E/AndroidRuntime(18799):        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
E/AndroidRuntime(18799):        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
E/AndroidRuntime(18799):        at java.lang.Thread.run(Thread.java:856)
E/AndroidRuntime(18799): Caused by: java.lang.NoClassDefFoundError: org.apache.commons.net.ftp.FTPClient
E/AndroidRuntime(18799):        at it.foto.FotoActivity$FotoGetTask.doInBackground(FotoActivity.java:207)
E/AndroidRuntime(18799):        at it.foto.FotoActivity$FotoGetTask.doInBackground(FotoActivity.java:1)
E/AndroidRuntime(18799):        at android.os.AsyncTask$2.call(AsyncTask.java:287)
E/AndroidRuntime(18799):        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
E/AndroidRuntime(18799):        ... 5 more

L'errore alla riga 207: FTPClient client = new FTPClient();
Di seguito il mio codice:
Codice (Java): [Seleziona]
public class FotoActivity extends Activity implements SurfaceHolder.Callback{
       
        private static final String TAG = "FOTO";
        private SurfaceView mSurfaceView;
        private SurfaceHolder mSurfaceHolder;
        private Camera mCamera;
        private boolean mPreviewRunning;
        public String nomeFoto;
        private ProgressDialog pd;
       
    /** Called when the activity is first created. */
    @SuppressWarnings("deprecation")
        @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().setFormat(PixelFormat.TRANSLUCENT);
        requestWindowFeature(Window.FEATURE_NO_TITLE); 
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);  
        setContentView(R.layout.mod_foto);
       
        // SCATTA FOTO
        Button buttonPicture = (Button) findViewById(R.id.camera_surface_button);
                buttonPicture.setOnClickListener(new OnClickListener(){
                        public void onClick(View v) {
                                pd = ProgressDialog.show(FotoActivity.this,"Foto","Caricamento in corso...",true,false);
                               
                                mCamera.takePicture(shutterCallback, rawCallback, jpegCallback);
                        }
                });
               
                mSurfaceView    = (SurfaceView)findViewById(R.id.camera_surface);
                mSurfaceView.setClickable(true);
               
        mSurfaceHolder  = mSurfaceView.getHolder();    
        mSurfaceHolder.addCallback(this);                      
        mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);       
    }

    ShutterCallback shutterCallback = new ShutterCallback() { // <6>
      public void onShutter() {
        Log.d(TAG, "onShutter'd");
      }
    };

    PictureCallback rawCallback = new PictureCallback() { // <7>
      public void onPictureTaken(byte[] data, Camera camera) {
        Log.d(TAG, "onPictureTaken - raw");
      }
    };

    PictureCallback jpegCallback = new PictureCallback() { // <8>
      public void onPictureTaken(byte[] data, Camera camera) {
        FileOutputStream outStream = null;
        try {
          // Write to SD Card
          nomeFoto = String.format("%d", System.currentTimeMillis());
          outStream = new FileOutputStream(String.format("/sdcard/" + nomeFoto + ".jpg")); // <9>
          outStream.write(data);
          outStream.close();
                   
          // creo e avvio asynctask
          FotoGetTask task = new FotoGetTask();
          task.execute();

          Log.d(TAG, "onPictureTaken - wrote bytes: " + data.length);
        } catch (FileNotFoundException e) { // <10>
          e.printStackTrace();
        } catch (IOException e) {
          e.printStackTrace();
        } finally {
        }
        Log.d(TAG, "onPictureTaken - jpeg");
      }

    };
       
        public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
                if (mPreviewRunning)
                        mCamera.stopPreview();
               
                //setto le preferenze
                Camera.Parameters p = mCamera.getParameters(); 
                p.setPreviewSize(arg2, arg3);
                ArrayList<Size> list = (ArrayList<Size>) p.getSupportedPictureSizes(); 
                int picture_width = list.get(list.size()-1).width;
                int picture_height = list.get(list.size()-1).height;
                p.setPictureSize(picture_width, picture_height);       
                p.setJpegQuality(50);  
                p.setFlashMode("on");
                p.setFocusMode("auto");
       
                // salvo le pref
                mCamera.setParameters(p);
                try {
                        mCamera.setPreviewDisplay(arg0);       
                        mCamera.startPreview();
                        mPreviewRunning = true;
                } catch (IOException e) {
                        //gestione errore
                }
       
        }
       
        public void surfaceCreated(SurfaceHolder holder) {
                if (mCamera == null) {
                        mCamera = Camera.open();
                try {
                        mCamera.setPreviewDisplay(holder);
                } catch (IOException e) {
                        mCamera.release();
                        mCamera = null;
                }
            }
               
        }

        public void surfaceDestroyed(SurfaceHolder holder) {
                if (mCamera != null) {
                        mCamera.stopPreview();
                        mCamera.setPreviewCallback(null);
                        mCamera.release();
                        mCamera = null;
                }
        }
       
       
        private class FotoGetTask extends AsyncTask<Void,Void,String>  {
                protected String doInBackground(Void... params) {
               
                //Upload del file verso il server ftp
                FTPClient client = new FTPClient();
                try {
                        InetAddress indirizzo = InetAddress.getByName("www.miosito.it");
                        client.connect(indirizzo);
                                //aperta la connessione al server procedo al login
                                boolean loggato = client.login("miosito@aruba.it", "miapassw");

                                //apro il file contenuto nel path /sdcard come stream
                                client.setFileType(FTP.BINARY_FILE_TYPE);                                      
                                File sdcardDir = Environment.getExternalStorageDirectory();
                                File file = new File(sdcardDir, nomeFoto + ".jpg");
                                FileInputStream fis = new FileInputStream(file);
                               
                                boolean upload_ok = client.storeFile("/miosito.it/foto/"+ nomeFoto + ".jpg", fis);
                                fis.close();                                                                                           
                               
                        } catch (SocketException e) {
                                e.printStackTrace();
                        } catch (IOException e) {
                                e.printStackTrace();
                        }
           return null;          
        }

        @Override
        protected void onPostExecute(String result) {
           pd.dismiss();
           
           Toast.makeText(FotoActivity.this, "Foto caricata con successo!", Toast.LENGTH_LONG).show();
        }
     }
}

Potete aiutarmi?
Grazie
« Ultima modifica: 01 Aprile 2013, 12:38:53 CEST da Ivan86 »

Offline DarnellNajanReed

  • Utente normale
  • ***
  • Post: 359
  • Respect: +49
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus One, Acer Iconia A500/501, Asus Transformer Prime, Galaxy ACE, Galaxy S Plus, Galaxy S Advance P, Galaxy Tab 2 7.0, Google Nexus 7
  • Play Store ID:
    Luigi Notaro
  • Sistema operativo:
    OS X 10.8.3
Re:Caricamento di una foto su server con FTPClient
« Risposta #1 il: 01 Aprile 2013, 14:39:22 CEST »
0
Bè, l'errore più che sulla new è su classe non trovata:
Codice (Java): [Seleziona]
Caused by: java.lang.NoClassDefFoundError: org.apache.commons.net.ftp.FTPClientSei sicuro di aver correttamente importato le commons net di apache?

Offline Ivan86

  • Utente junior
  • **
  • Post: 139
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S II
  • Sistema operativo:
    Windows 7
Re:Caricamento di una foto su server con FTPClient
« Risposta #2 il: 01 Aprile 2013, 21:13:21 CEST »
0
Ciao,

Nonostante avessi importato le librerie:
Codice (Java): [Seleziona]
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
mi sono accorto che nella mia /lib avevo delle librerie commons-net.jar vecchie.
Ma aggiornandole alla commons-net-3.2.jar cmq non risolvo il problema
infatti da sempre lo stesso errore :(
« Ultima modifica: 01 Aprile 2013, 22:02:25 CEST da Ivan86 »

Offline DarnellNajanReed

  • Utente normale
  • ***
  • Post: 359
  • Respect: +49
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus One, Acer Iconia A500/501, Asus Transformer Prime, Galaxy ACE, Galaxy S Plus, Galaxy S Advance P, Galaxy Tab 2 7.0, Google Nexus 7
  • Play Store ID:
    Luigi Notaro
  • Sistema operativo:
    OS X 10.8.3
Re:Caricamento di una foto su server con FTPClient
« Risposta #3 il: 01 Aprile 2013, 22:47:52 CEST »
0
Però il folder che tu indichi come "lib" dovrebbe essere nominato "libs"

Offline Ivan86

  • Utente junior
  • **
  • Post: 139
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S II
  • Sistema operativo:
    Windows 7
Re:Caricamento di una foto su server con FTPClient
« Risposta #4 il: 01 Aprile 2013, 23:12:39 CEST »
0
D:  cavolo... non me ne ero mai accorto. Grazie.

Cmq ho notato che all'interno di Built Path, nella scheda Order and Export, devo anche spuntare i jar che mi interessano.
Cosa che non facevo prima per gli altri jar...