Autore Topic: Come realizzare un adapter con ImageView create da byte[]?  (Letto 1098 volte)

Offline mailojah

  • Utente junior
  • **
  • Post: 61
  • Respect: 0
    • Mostra profilo
Come realizzare un adapter con ImageView create da byte[]?
« il: 01 Agosto 2011, 10:45:28 CEST »
0
Salve ragazzi, sto cercando di realizzare una ListView di adapter formato da TextView e un ImageView...le immagini le prelevo da un WS che me le converte in byte e poi in Stringhe tramite la solita classe Base64:

Codice (Java): [Seleziona]
imageString = Base64.encodeBytes(imageByte);
ovviamente se passo da string a byte e poi me lo scrivo su file ottengo l'immagine di partenza, quindi questa parte sicuto funziona...

ora il mio client android crea il mio SimpleAdapter tramite questo metodo statico:

Codice (Java): [Seleziona]
public static SimpleAdapter createNewsAdapter(List<? extends Parcelable> news, Context context){
                ArrayList<HashMap<String, Object>> adapterNews = new ArrayList<HashMap<String,Object>>();
                Bitmap bitmap=null;
                ImageView imageNew = null;
                byte[] bb=null;
                for(int i=0; i<news.size();i++){
                        HashMap<String,Object> newMap=new HashMap<String, Object>();
                        newMap.put("title", ((NewWrapper)news.get(i)).getTitle());
                        newMap.put("concept", ((NewWrapper)news.get(i)).getConcept());
                        newMap.put("data", ((NewWrapper)news.get(i)).getDataInserimento());
                        try {
                                bb = Base64.decode( ((NewWrapper)news.get(i)).getImageNew() );
                                bitmap = BitmapFactory.decodeByteArray(bb, 0, bb.length);
                                imageNew = new ImageView(context);
                                imageNew.setImageBitmap(bitmap);
                        } catch (IOException e) {
                                e.printStackTrace();
                        }
                        newMap.put("imageNew", imageNew);
                        adapterNews.add(newMap);
                }              
                String[] from=new String[]{"title", "concept", "data", "imageNew"};
                int[] to=new int[]{R.id.newTitle, R.id.newConcept, R.id.newData, R.id.imageNew};
                return new SimpleAdapter(context, adapterNews, R.layout.new_item, from, to);           
        }

e la mia activity che setta l'adapter è questa:

Codice (Java): [Seleziona]
@Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.news_layout);
                List<? extends Parcelable> news = getIntent().getParcelableArrayListExtra("news");
               
                SimpleAdapter adapter = NewsAdapter.createNewsAdapter(news, this);
               
                ((ListView)findViewById(R.id.newsListView)).setAdapter(adapter);
               
        }      

quello ke succede è che le stringhe le vedo tutte tranne le immagini!!
Se inserisco le immagini staticamente nella cartella drawable e poi modifico il put dell'adapter:

Codice (Java): [Seleziona]
newMap.put("imageNew",R.drawable.image);
le riesco a vedere!!Cosa ho sbagliato per voi??Grazie mille

Offline mailojah

  • Utente junior
  • **
  • Post: 61
  • Respect: 0
    • Mostra profilo
Re:Come realizzare un adapter con ImageView create da byte[]?
« Risposta #1 il: 01 Agosto 2011, 15:13:43 CEST »
0
nessuno ha un'idea??Grazie

Offline denper

  • Utente normale
  • ***
  • Post: 290
  • Respect: +60
    • Mostra profilo
    • Anddenper
  • Dispositivo Android:
    Moto G
  • Play Store ID:
    denper
  • Sistema operativo:
    Window 7, Windows XP
Re:Come realizzare un adapter con ImageView create da byte[]?
« Risposta #2 il: 01 Agosto 2011, 15:22:29 CEST »
0
Ciao,
potrebbe essere che l'immagine creata qui

Codice (Java): [Seleziona]
bb = Base64.decode( ((NewWrapper)news.get(i)).getImageNew() );
bitmap = BitmapFactory.decodeByteArray(bb, 0, bb.length);

non sia corretta? Prova a fare un test creando una ImageView nel layout principale e settandogli la bitmap come fai nell'adapter . Giusto per capire se c'è qualche problema nella bitmap.
Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. [A.Einstein]

Proteggi la tua privacy! Utilizza GhostPhone! https://play.google.com/store/apps/details?id=com.denper.gp
Giochi a Winforlife e Superenalotto e sei stanco di controllare le tue schedine manualmente? Prova Checkwin: https://play.google.com/store/apps/details?id=com.denper.checkwintrial

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Come realizzare un adapter con ImageView create da byte[]?
« Risposta #3 il: 01 Agosto 2011, 15:33:42 CEST »
0
nessuno ha un'idea??Grazie

Sei pregato di non uppare dopo solo poche ore.
Se qualcuno ha un'idea te la scrive.

Offline mailojah

  • Utente junior
  • **
  • Post: 61
  • Respect: 0
    • Mostra profilo
Re:Come realizzare un adapter con ImageView create da byte[]?
« Risposta #4 il: 01 Agosto 2011, 15:52:24 CEST »
0
grazie denper farò come dici...ti farò sapere!

Offline mailojah

  • Utente junior
  • **
  • Post: 61
  • Respect: 0
    • Mostra profilo
Re:Come realizzare un adapter con ImageView create da byte[]?
« Risposta #5 il: 01 Agosto 2011, 15:53:46 CEST »
0
In qst forum c'è un topic che parla proprio di questo

Codice (LaTeX): [Seleziona]
[url]http://www.anddev.it/index.php/topic,2620.0.html[/url]
ma purtroppo non ci ha dato la soluzione  :'(

Offline denper

  • Utente normale
  • ***
  • Post: 290
  • Respect: +60
    • Mostra profilo
    • Anddenper
  • Dispositivo Android:
    Moto G
  • Play Store ID:
    denper
  • Sistema operativo:
    Window 7, Windows XP
Re:Come realizzare un adapter con ImageView create da byte[]?
« Risposta #6 il: 01 Agosto 2011, 16:05:06 CEST »
0
Altra cosa,
utilizzando
Codice (Java): [Seleziona]
newMap.put("imageNew", R.drawable.image);passi come variabile un int, mentre nell'adapter passi un oggetto di tipo ImageView. Potrebbe essere che l'adapter standard non riesca a fare il bind...

e hai provato a passare all'ImageView un Drawable? tipo:

Codice (Java): [Seleziona]
Drawable drawable = new BitmapDrawable(bitmap);
imageNew.setImageDrawable(drawable);
anche se la mia sensazione è che l'adapter non sia in grado di fare i bind dell'oggetto...
Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. [A.Einstein]

Proteggi la tua privacy! Utilizza GhostPhone! https://play.google.com/store/apps/details?id=com.denper.gp
Giochi a Winforlife e Superenalotto e sei stanco di controllare le tue schedine manualmente? Prova Checkwin: https://play.google.com/store/apps/details?id=com.denper.checkwintrial

Offline mailojah

  • Utente junior
  • **
  • Post: 61
  • Respect: 0
    • Mostra profilo
Re:Come realizzare un adapter con ImageView create da byte[]?
« Risposta #7 il: 01 Agosto 2011, 16:11:55 CEST »
0
Allora,

1)Secondo me non è un problema di decodifica, perchè mi sono ricordato che utilizzo lo stesso codice per prelevare dal WS e visulaizzare un immagine di profilo. Ho controllato bene ed è uguale!!E lato server ho fatto anche delle prove di decodifica scrivendo su file system le immagini e tutto va liscio.

2)Di recente ho provato a fare anche quello ke mi hai consigliato ovvero:

Codice (Java): [Seleziona]
Drawable drawable = new BitmapDrawable(bitmap);
imageNew.setImageDrawable(drawable);

ma nn va neanke così! :-\

se l'adapter non è in grado di fare i bind dell'oggetto...allora in questi casi come si dovrebbe procedere??Io sto cercando e provando, una soluzione c'è, ma nn l'hanno postata purtroppo :'(

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Come realizzare un adapter con ImageView create da byte[]?
« Risposta #8 il: 01 Agosto 2011, 16:13:25 CEST »
0
Devi usare questa classe:

SimpleAdapter.ViewBinder | Android Developers

cerca sul forum che è un argomento trattato e troverai degli esempi.

Offline mailojah

  • Utente junior
  • **
  • Post: 61
  • Respect: 0
    • Mostra profilo
Re:Come realizzare un adapter con ImageView create da byte[]?
« Risposta #9 il: 01 Agosto 2011, 16:16:04 CEST »
0
Ok grazie Ricky', allora cercherò bene nel forum, vi farò sapere!Scusa ancora per prima. Ciao

Offline mailojah

  • Utente junior
  • **
  • Post: 61
  • Respect: 0
    • Mostra profilo
Re:Come realizzare un adapter con ImageView create da byte[]?
« Risposta #10 il: 01 Agosto 2011, 17:10:05 CEST »
0
Ok funziona!!
Dopo aver creato l'oggetto Bitmap dall'array di byte:

Codice (Java): [Seleziona]
HashMap<String,Object> newMap=new HashMap<String, Object>();
byte[] bb = Base64.decode( ((NewWrapper)news.get(i)).getImageNew() );
Bitmap bitmap = BitmapFactory.decodeByteArray(bb, 0, bb.length);
newMap.put("imageNew", bitmap);

creo l'adpter aggiungendo il setViewBinder:

Codice (Java): [Seleziona]
SimpleAdapter adapter = new SimpleAdapter(context, adapterNews, R.layout.new_item, from, to);
adapter.setViewBinder(new SimpleAdapter.ViewBinder() {
                       
                @Override
                public boolean setViewValue(View view, Object data, String textRepresentation) {
                        if (view instanceof ImageView) {
                             ((ImageView) view).setImageBitmap((Bitmap) data);
                        return true;
                    }
                    return false;
                }
});
return adapter;


e così funziona alla perfezione!!
L'unico problema è.....non c'ho capito niente eeheheh!Nel senso non riesco a capire il problema del Binding e come fa a risolverlo...
io cerco di documentarmi, se avete qlc info, sarei curioso di sapere. Grazie ancora;)
« Ultima modifica: 01 Agosto 2011, 17:17:29 CEST da mailojah »