Autore Topic: Inserire immagini all'interno di un database  (Letto 642 volte)

Offline scemodicecosa

  • Nuovo arrivato
  • *
  • Post: 22
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 4
Inserire immagini all'interno di un database
« il: 17 Febbraio 2015, 23:06:56 CET »
0
Ciao a tutti, sto sviluppando un'applicazione che mi permette di catalogare delle piante, per adesso ho realizzato vari tab e delle list view alle quali posso aggiungere ogni volta nuove piante, e cliccando su di esse si apre una pagina con descrizione nome e info varie, il tutto salvato all'interno di un SQLiteDatabase. Per aggiungere anche le foto relative alle piante come posso procedere? Cercando su internet ho letto che è possibile salvarle come blob nel database o salvare il path dell'immagine nel database. Per avere le immagini con la risoluzione maggiore possibile quale conviene usare? esistono altrimenti altri modi?
Grazie  :-)

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Inserire immagini all'interno di un database
« Risposta #1 il: 18 Febbraio 2015, 07:51:16 CET »
0
Credo che salvare immagini in un database SQLite non sia il massimo, ne' come comodità ne' come performance. Comprendo benissimo la comodità di avere un'unica base dati con testo e immagini, ma a parte questo tutto il resto è in salita.

C'è qualche ragione per cui non puoi salvare le immagini in "cartelle" private dell'app?
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline scemodicecosa

  • Nuovo arrivato
  • *
  • Post: 22
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 4
Re:Inserire immagini all'interno di un database
« Risposta #2 il: 18 Febbraio 2015, 08:20:22 CET »
0
Credo che salvare immagini in un database SQLite non sia il massimo, ne' come comodità ne' come performance. Comprendo benissimo la comodità di avere un'unica base dati con testo e immagini, ma a parte questo tutto il resto è in salita.

C'è qualche ragione per cui non puoi salvare le immagini in "cartelle" private dell'app?
Scusa la mia ignoranza ma per cartelle private dell'app intendi i drawable? Perché non pensavo si potessero aggiungere ogni volta immagini lo dopo aver creato l'apk. Fondamentalmente la cosa che mi interessava era la condivisione con altri miei amici dei dati dell'app, per i database ho creato una pagina di backup e ripristino. La mia idea per le immagini era salvarle come blob nel DB ma ho visto che ci sono molte limitazioni, così ho pensato di selezionare le foto da galleria o camera, copiarle in una cartella rinominandole magari con il tipo nome_pianta.jpg e poi salvare il path nel database in modo da richiamarle ogni volta nella scheda delle singole piante. Così per condividere i dati bi basta passare backup e cartella con foto ai miei amici e il gioco è fatto. È possibile tutto questo o forse è un po' controproducente ed esistono modi migliori?

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Inserire immagini all'interno di un database
« Risposta #3 il: 18 Febbraio 2015, 09:43:25 CET »
0
Per me è perfetto come hai descritto quest'ultima implementazione. Prima avevo solo accennato al fatto che metterle come BLOB nel database era problematico, mentre è molto meglio tenerle come file nel file system del telefono e salvarsi solo il path/nome.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline scemodicecosa

  • Nuovo arrivato
  • *
  • Post: 22
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 4
Re:Inserire immagini all'interno di un database
« Risposta #4 il: 18 Febbraio 2015, 10:36:00 CET »
0
Sia perché ieri sera andavo di fretta ma sopratutto perché ho avuto l'illuminazione sta notte :D È possibile creare una miniatura delle foto salvate e usarla nelle singole righe della lista, per avere una piccola anteprima?

Offline arlabs

  • Utente normale
  • ***
  • Post: 430
  • Respect: +49
    • Mostra profilo
  • Dispositivo Android:
    GalaxyS6, Nexus5
  • Play Store ID:
    AR Labs
  • Sistema operativo:
    Windows 10
Re:Inserire immagini all'interno di un database
« Risposta #5 il: 18 Febbraio 2015, 11:18:33 CET »
+1
Bradipao ha consigliato molte volte Picasso, quindi penso di anticiparlo con questa risposta :)

Codice (Java): [Seleziona]
            ImageView miniView = (ImageView) view.findViewById(R.id.miniature);
            Picasso.with(context)
                    .load("file:///path/name.png")
                    .placeholder(R.drawable.ic_placeholder)
                    .error(R.drawable.ic_error)
                    .resizeDimen(R.dimen.miniature_size, R.dimen.miniature_size)
                    .into(miniView);


Offline scemodicecosa

  • Nuovo arrivato
  • *
  • Post: 22
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 4
Re:Inserire immagini all'interno di un database
« Risposta #6 il: 18 Febbraio 2015, 12:20:16 CET »
0
Grazie mille ad entrambi, velocissimi e gentilissimi. Un'ultima cosa, se volessi impostare 2 foto in una imageview in modo tale che con lo swipe possa cambiare foto, come faccio? Grazie
EDIT: come mai mi dice ic_placeholder, ic_error, miniature_size cannot be resolved or is not a field? Devo impostarli io in qualche modo?
« Ultima modifica: 18 Febbraio 2015, 12:26:20 CET da scemodicecosa »

Offline arlabs

  • Utente normale
  • ***
  • Post: 430
  • Respect: +49
    • Mostra profilo
  • Dispositivo Android:
    GalaxyS6, Nexus5
  • Play Store ID:
    AR Labs
  • Sistema operativo:
    Windows 10
Re:Inserire immagini all'interno di un database
« Risposta #7 il: 18 Febbraio 2015, 14:07:32 CET »
0
Beh sì.

Ho usato dei nomi di risorse "finti" che poi devi sostituire.

R.id.miniature è l'ID della tua ImageView nel layout della riga
R.drawable.ic_placeholder è il drawable che viene visualizzato mentre Picasso carica immagine (Puoi omettere tutta la riga ".placeholder(R.drawable.ic_placeholder)" )
R.drawable.ic_errorè il drawable che viene visualizzato se Picasso non riesce a caricare l'immagine (Puoi omettere tutta la riga ".error(R.drawable.ic_error)" )
R.dimen.miniature_size è la risorsa dimension che puoi impostare nella/nelle cartelle value.
   Se non ce l'hai crea un file dimens.xml nella cartella value e componilo così:

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="miniature_size">50dp</dimen>
</resources>

Per cambiare la foto con lo swipe potresti creare un ViewPager con dentro un ImageView in ogni pagina, ma non è così immediato... esisterà probabilmente qualche CustomView già fatta...

Offline scemodicecosa

  • Nuovo arrivato
  • *
  • Post: 22
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 4
Re:Inserire immagini all\'interno di un database
« Risposta #8 il: 18 Febbraio 2015, 16:54:17 CET »
0
Ah ecco, mi sembrava strano, grazie ancora per le info. Se avrò tempo cercherò di implementare anche lo swipe
« Ultima modifica: 18 Febbraio 2015, 23:57:24 CET da scemodicecosa »