Autore Topic: Inviare immagini fra server (Java) e client (Android).  (Letto 860 volte)

Offline Ilgard

  • Utente junior
  • **
  • Post: 64
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Xperia M
  • Sistema operativo:
    Ubuntu 14.04
Inviare immagini fra server (Java) e client (Android).
« il: 31 Luglio 2014, 15:57:31 CEST »
0
Salve a tutti,
sto cercando di inviare una immagine (50x50) da un server scritto in Java ad un'app Android sfruttando una socket. Il problema è che non capisco come fare.
Su internet ho trovato un sacco di diversi metodi, tutti che mi sembrano fare una gran confusione.
A quel che ho capito lato client devo crearmi una Bitmap tramite BitmapFactory, però non ho ben capito come eseguire la codifica all'invio e la relativa decodifica alla ricezione.
Grazie dell'aiuto :D

Offline Ilgard

  • Utente junior
  • **
  • Post: 64
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Xperia M
  • Sistema operativo:
    Ubuntu 14.04
Re:Inviare immagini fra server (Java) e client (Android).
« Risposta #1 il: 02 Agosto 2014, 16:00:36 CEST »
0
Sono riuscito a risolvere da solo, scrivo qui come ho fatto che magari a qualcun'altro serve.
Lato server ho caricato l'immagine come BufferedImage e l'ho scritta in un ByteArrayOutuputStream che poi ho convertito in un array di byte da scrivere sulla socket.
Codice (Java): [Seleziona]
ByteArrayOutputStream bos = new ByteArrayOutputStream();
BufferedImage img = ImageIO.read("Percorso immagine");
ImageIO.write( img, "jpg", bos );
                                               
byte[] imageInByte = bos.toByteArray();
bos.close();

//Uso un DataOutputStream ed invio la dimensione dell'immagine
dout.writeInt(imageInByte.length);
dout.flush();

dout.write(imageInByte);
dout.flush();

Lato client leggo la dimensione dell'immagine e leggo successivamente altrettanti byte:
Codice (Java): [Seleziona]
//In questo caso uso un DataInputStream
int temp = in.readInt();
byte[] buffer = new byte[temp];
in.read(buffer);
                                       
Bitmap bitmap = BitmapFactory.decodeByteArray(buffer, 0, buffer.length);

Mi è venuto un dubbio per quanto riguarda l'uso della socket: mi capiterà di chiuderla e riaprirla per non tenere sempre attiva la connessione, secondo voi è meglio usarla come variabile statica o passarne il riferimento negli extra degli intent?