Autore Topic: leggere immagini salvate in tabella mysql tramite json  (Letto 3330 volte)

Offline mrfalco

  • Utente junior
  • **
  • Post: 81
  • Respect: +2
    • Mostra profilo
    • www.falcodomingo.it
  • Dispositivo Android:
    Samsung Galazy S
  • Sistema operativo:
    Windows Vista
leggere immagini salvate in tabella mysql tramite json
« il: 24 Marzo 2011, 12:54:02 CET »
0
Salve,c' è un modo per ritornare una query che raprresenta in una tabella mysql(id,descrizione,immagine(blob)) i valori come se fosse una query di select normale ho fatto questo:

Codice (Java): [Seleziona]
        ListView mView;
        ArrayList<HashMap<String, Object>> lista = new ArrayList<HashMap<String, Object>>();    
        mView = (ListView) findViewById(R.id.listView1);
        String[] nome={"Name","descr","immg"};
        int[] reso={R.id.descr,R.id.Name,R.id.immg};
        try{
                JSONArray jArray = new JSONArray(result);
                for(int i=0;i<jArray.length();i++){
                        JSONObject json_data = jArray.getJSONObject(i);
                       
                        HashMap<String,Object> data = new HashMap<String,Object> ();
                                data.put("descr",json_data.getString("descrizione"));
                                                data.put("Name",json_data.getString("idcat") );
                                               // data.put("immg",json_data.getString("immagine") );
                                   
                        lista.add(data);
                }
                SimpleAdapter sp=new SimpleAdapter(this, lista,R.layout.categ_item , nome, reso);
                mView.setAdapter(sp);
               
        }catch(JSONException e){
                Log.e("log_tag2", "Error parsing data "+e.toString());
        }

il codice è corretto è funziona solo che ho commentato il data.put relativo al campo immagine perchè non so come trattarlo anche perche' la query che torna non mi passa il valore binario dell'immagine.

questo è il codice php:
Codice: [Seleziona]
<?php
        mysql_connect("localhost","root","pwd");
        mysql_select_db("db");
       
        $query=mysql_query("SELECT idcat,descrizione,immagine FROM categoria ");
        while($row=mysql_fetch_assoc($query))
           
        $output[]=$row;
 
        print(json_encode($output));
 
        mysql_close();
?>

credo che si debba intervenire anche nel codice php
questa cosa potrebbe servire ad un sacco di persone credetemi.
Potresti darmi una dritta?
Grazie
« Ultima modifica: 24 Marzo 2011, 13:09:13 CET da 7h38ugg3r »

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:leggere immagini salvate in tabella mysql tramite json
« Risposta #1 il: 24 Marzo 2011, 13:16:32 CET »
0
Ricollegando la discussione al post precedente (quello in cui avevi inserito la tua domanda), devi codificare in base64 $row.immagine, prima di serializzarla.
Ovviamente, l'operazione inversa devi farla al momento in cui la riprendi da android.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline mrfalco

  • Utente junior
  • **
  • Post: 81
  • Respect: +2
    • Mostra profilo
    • www.falcodomingo.it
  • Dispositivo Android:
    Samsung Galazy S
  • Sistema operativo:
    Windows Vista
Re:leggere immagini salvate in tabella mysql tramite json
« Risposta #2 il: 24 Marzo 2011, 13:19:34 CET »
0
questo è quello che riesco a fare

<?php
   mysql_connect("localhost","root","1234");
   mysql_select_db("falcopos");
   
   $query=mysql_query("SELECT idcat,descrizione,immagine FROM categoria ");
   while ($row=mysql_fetch_assoc($query)) {

            $str_dec= base64_encode($row['immagine']);
            $row[‘immagine’]=$str_dec ;

        $output[]=$row;
    }
          print(json_encode($output)) ;


 
   mysql_close();
?>
non so se è corretta?
grazie ciao
« Ultima modifica: 24 Marzo 2011, 21:23:46 CET da mrfalco »

Offline mrfalco

  • Utente junior
  • **
  • Post: 81
  • Respect: +2
    • Mostra profilo
    • www.falcodomingo.it
  • Dispositivo Android:
    Samsung Galazy S
  • Sistema operativo:
    Windows Vista
Re:leggere immagini salvate in tabella mysql tramite json
« Risposta #3 il: 25 Marzo 2011, 08:08:30 CET »
0
per il php credo di aver risolto ora non so se faccio bene a decodificare in base 64:

Codice (Java): [Seleziona]
try{
                JSONArray jArray = new JSONArray(result);
                for(int i=0;i<jArray.length();i++){
                        JSONObject json_data = jArray.getJSONObject(i);
                       
                        HashMap<String,Object> data = new HashMap<String,Object> ();
                                data.put("descr",json_data.getString("descrizione"));
                                    data.put("Name",json_data.getString("idcat") );
                                    // Convert base64 string to a byte array
                                    ImageView image=new ImageView(this);
                                    byte[] res1 = Base64.decode(json_data.getString("immagine"), 0);
                                    InputStream ins =new ByteArrayInputStream(res1);
                                    Drawable dUser = Drawable.createFromStream(ins , "immagine");
                                    image.setImageDrawable(dUser);
                                    data.put("immg",image);                                
                   
                        lista.add(data);
                }
                SimpleAdapter sp=new SimpleAdapter(this, lista,R.layout.categ_item , nome, reso);
                mView.setAdapter(sp);
               
        }catch(JSONException e){
                Log.e("log_tag2", "Error parsing data "+e.toString());
        }

infatti nella view l'immagine non viene.
Qualcuno puo' aiutarmi
Grazie
« Ultima modifica: 25 Marzo 2011, 09:24:26 CET da mrfalco »

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:leggere immagini salvate in tabella mysql tramite json
« Risposta #4 il: 25 Marzo 2011, 15:44:37 CET »
0
potresti verificare quanti k occupano le immagini non codificate in base 64 e quella codificata? ll rapporto dovrebbe essere di 3:4, cioè per ogni 30 byte dell'immagine non codificata ne hai 40 di quella codificata.
Inoltre, controlla se le dimensioni del file che ti arrivano sono corrette.

Inoltre, una volta che hai l'input stream, prova a decodificare l'immagine direttamente con
Codice (Java): [Seleziona]
     image.setImageDrawbale(new BitmapDrawable(context.getResources(), ins));
« Ultima modifica: 25 Marzo 2011, 15:52:32 CET da 7h38ugg3r »
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline mrfalco

  • Utente junior
  • **
  • Post: 81
  • Respect: +2
    • Mostra profilo
    • www.falcodomingo.it
  • Dispositivo Android:
    Samsung Galazy S
  • Sistema operativo:
    Windows Vista
Re:leggere immagini salvate in tabella mysql tramite json
« Risposta #5 il: 25 Marzo 2011, 16:12:53 CET »
0
Solo ora mi sono accorto di una cosa davvero strana e cioè non tanto nel codice java che credo vada bene ma ne codice php mi succede questo:

se tolgo da print (Json_encode($output)); la parola json_encode e quindi diventa print_n ($output); facendo girare la pagina php e copiano il valore del campo array decodificato con un programmino che ho appena fatto riesco a ricostruire perfettamente l'immagine.
Strano ma vero sono 36 ore che ci sto dietro

Quindi in definitiva json_encode si predica di tutti i tipi tranne che dei blob dove mi aggiunge "\" che non sono accettati dalle specifiche di base64.

Ora devo capire come rimediare a questa farsa.

Se hai risposte in merito fai pure
Grazie

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:leggere immagini salvate in tabella mysql tramite json
« Risposta #6 il: 25 Marzo 2011, 16:35:57 CET »
0
torva una buona libreria php per la codifica a base 64...^_^
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline mrfalco

  • Utente junior
  • **
  • Post: 81
  • Respect: +2
    • Mostra profilo
    • www.falcodomingo.it
  • Dispositivo Android:
    Samsung Galazy S
  • Sistema operativo:
    Windows Vista
Re:leggere immagini salvate in tabella mysql tramite json
« Risposta #7 il: 25 Marzo 2011, 17:41:31 CET »
0
Ho risolto con php ho utilizzato la concatenazione ed ora cio' che mi ritorna a livello di base64 è perfetta ora il problema che  mi resta è visualizzare l'imagine che sia come facevo io sia come mi hai consigliato non va.

se c'era un equivalente di memorystream in javaandroid avrei risolto cosi:

 imagebyte img=Convert.FromBase64String(stringa);
MemoryStream ms=new memoryStream(img,0,img.Length);
ms.write(img,0,img.length);
Image image=image.FromStream(ms,true);

ma non so se esiste in questo ambiente

Grazie

Offline mrfalco

  • Utente junior
  • **
  • Post: 81
  • Respect: +2
    • Mostra profilo
    • www.falcodomingo.it
  • Dispositivo Android:
    Samsung Galazy S
  • Sistema operativo:
    Windows Vista
Re:leggere immagini salvate in tabella mysql tramite json
« Risposta #8 il: 26 Marzo 2011, 13:31:46 CET »
0
anche cosi l'immagine non viene creata

Codice (Java): [Seleziona]
 ListView mView;
        ArrayList<HashMap<String, Object>> lista = new ArrayList<HashMap<String, Object>>();    
        mView = (ListView) findViewById(R.id.listView1);
        String[] nome={"Name","descr","immg"};
        int[] reso={R.id.descr,R.id.Name,R.id.immg};
        try{
                JSONArray jArray = new JSONArray(result);
                for(int i=0;i<jArray.length();i++){
                        JSONObject json_data = jArray.getJSONObject(i);
                       
                        HashMap<String,Object> data = new HashMap<String,Object> ();
                                data.put("descr",json_data.getString("descrizione"));
                                    data.put("Name",json_data.getString("idcat") );
                               
                                    byte[] decodedString = Base64.decode(json_data.getString("immagine"), Base64.DEFAULT);
                                    Log.d("Codifica", json_data.getString("immagine"));
                                    Bitmap bmp = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
                                    ImageView image = new ImageView(this);
                                    image.setImageBitmap(bmp);
                                 
                                   
                                   
                      /*  byte[] res1 = Base64.decode(json_data.getString("immagine"), Base64.DEFAULT);
                        Log.d("Codifica", json_data.getString("immagine"));
                        InputStream ins =new ByteArrayInputStream(res1);
                        //Drawable dUser = Drawable.createFromStream(ins , "immagine");
                        BitmapDrawable bd=new BitmapDrawable(ins);
                       
                                   
                        image.setImageDrawable(bd);
                        */

                        //image.setImageDrawable(dUser);

                                    data.put("immg",image);                                
                        lista.add(data);
                }
                SimpleAdapter sp=new SimpleAdapter(this, lista,R.layout.categ_item , nome, reso);
                mView.setAdapter(sp);
               
        }catch(JSONException e){
                Log.e("log_tag2", "Error parsing data "+e.toString());
        }
    }

qui il log cat

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:leggere immagini salvate in tabella mysql tramite json
« Risposta #9 il: 28 Marzo 2011, 15:21:17 CEST »
0
dal byte[] che ottieni decodificando la stringa, prova ad utilizzare un inputstream del tipo:

Codice (Java): [Seleziona]
byte[] decodedString = Base64.decode(json_data.getString("immagine"), Base64.DEFAULT);
ByteArrayInputStream in = new ByteArrayInputStream(decodedString);
Bitmap bmp = BitmapFactory.decodeStream(decodedString);
ImageView image = new ImageView(this);
image.setImageBitmap(bmp);

fammi sapere.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline mrfalco

  • Utente junior
  • **
  • Post: 81
  • Respect: +2
    • Mostra profilo
    • www.falcodomingo.it
  • Dispositivo Android:
    Samsung Galazy S
  • Sistema operativo:
    Windows Vista
Re:leggere immagini salvate in tabella mysql tramite json
« Risposta #10 il: 28 Marzo 2011, 15:29:25 CEST »
0
questa non va

Codice (Java): [Seleziona]
                                   byte[] decodedString = Base64.decode(json_data.getString("immagine"), Base64.DEFAULT);
                           ByteArrayInputStream in = new ByteArrayInputStream(decodedString);
                           Bitmap bmp = BitmapFactory.decodeStream(in);
                                   
                          image.setImageBitmap(bmp);

perdonami

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:leggere immagini salvate in tabella mysql tramite json
« Risposta #11 il: 28 Marzo 2011, 15:39:42 CEST »
0
ti da qualche messaggio di errore?
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline mrfalco

  • Utente junior
  • **
  • Post: 81
  • Respect: +2
    • Mostra profilo
    • www.falcodomingo.it
  • Dispositivo Android:
    Samsung Galazy S
  • Sistema operativo:
    Windows Vista
Re:leggere immagini salvate in tabella mysql tramite json
« Risposta #12 il: 28 Marzo 2011, 15:42:35 CEST »
0
si questo è il logcat

03-28 15:13:30.919: DEBUG/skia(542): --- SkImageDecoder::Factory returned null

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:leggere immagini salvate in tabella mysql tramite json
« Risposta #13 il: 28 Marzo 2011, 15:45:05 CEST »
0
il formato dell'immagine è RGB o BGR?
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline mrfalco

  • Utente junior
  • **
  • Post: 81
  • Respect: +2
    • Mostra profilo
    • www.falcodomingo.it
  • Dispositivo Android:
    Samsung Galazy S
  • Sistema operativo:
    Windows Vista
Re:leggere immagini salvate in tabella mysql tramite json
« Risposta #14 il: 28 Marzo 2011, 15:47:38 CEST »
0
scusami da dove lo vedo io so solo che è un'icona