Autore Topic: Lanciare ImageView in subActivity  (Letto 1081 volte)

Offline DirkPitt

  • Nuovo arrivato
  • *
  • Post: 23
  • Respect: 0
    • Mostra profilo
Lanciare ImageView in subActivity
« il: 01 Febbraio 2012, 17:19:06 CET »
0
Ciao , premetto di essere alle prime armi con android.

Sto tentando di far visualizzare una foto con una ImageView. Tale ImageView dovrebbe aprirsi in una activity secondaria al click di un bottone nell'activity principale.

Copio una parte del codice dell'activity principale, quella secondaria è in una classe che si chiama VediImmagine.java
Codice (Java): [Seleziona]
          mioBottone.setOnClickListener(new View.OnClickListener(){
               
                @Override
                public void onClick(View v){
                       
                       
                                ImageView im = (ImageView)findViewById(R.id.imageView);
                               
                                Bitmap bMap = BitmapFactory.decodeResource(getResources(), R.drawable.foto);
                               
                        im.setImageBitmap(bMap); //RIGA 56
                        startActivity(new Intent(ApplicazioneFoto.this,VediImmagine.class));
             }});

L'emulatore mi da l'errore "Application has stopped".

Il LogCat mi da
Codice (Java): [Seleziona]
java.lang.NullPointerException
at mio.package.ApplicazioneFoto$1.onClick(ApplicazioneFoto.java.56).

La riga 56 l ho commentata nel codice.

Qualcuno potrebbe aiutarmi a risolvere? Grazie :-)
« Ultima modifica: 01 Febbraio 2012, 17:22:13 CET da DirkPitt »

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Lanciare ImageView in subActivity
« Risposta #1 il: 01 Febbraio 2012, 19:54:30 CET »
0
L'imageView è nulla perché il findViewById che richiami viene fatto sul layout dell'activity principale, che non la contiene. Il findViewById, decode resource e setImageBitmap devi inserirli tutti nell'activity principale e passare l'id con intent.putExtra("id_immagine", id), ricavandolo poi nell'activity secondaria con getIntent().getIntExtra("id_immagine",-1);

Offline DirkPitt

  • Nuovo arrivato
  • *
  • Post: 23
  • Respect: 0
    • Mostra profilo
Re:Lanciare ImageView in subActivity
« Risposta #2 il: 01 Febbraio 2012, 20:03:54 CET »
0
Hai assolutamente ragione, ho modificato così nell'attività principale
Codice (Java): [Seleziona]
            bottone.setOnClickListener(new View.OnClickListener(){
                @Override
                public void onClick(View v){
                       
                        String foto = "./res/drawable-mdpi/foto1.jpg";
                       
                        Intent i = new Intent (AttivitaPrincipale.this,AttivitaSecondaria.class);
                        Bundle b = new Bundle();
                        b.putString("foto", foto);
                        i.putExtras(b);
                        startActivity(i);
               });

e questa è la secondaria
Codice (Java): [Seleziona]
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.image);
        ImageView im = (ImageView)findViewById(R.id.imageView);
        Bundle b = this.getIntent().getExtras();
        String path = b.getString("foto");
        Bitmap bMap = BitmapFactory.decodeFile(path);
        im.setImageBitmap(bMap);
}

Ma, ahimè, nell'emulatore il risultato non cambia!

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Lanciare ImageView in subActivity
« Risposta #3 il: 01 Febbraio 2012, 20:12:32 CET »
0
Non serve che passi per il bundle, perché gli extra della classe intent sono già in un bundle e tu devi passare solo una stringa. Richiama direttamente il metodo intent.putExtra(stringa, stringa) nell'activity principale e getIntent().getStringExtra() in quella secondaria.
Per l'errore, dovresti postare il logcat.  ;-)

Offline DirkPitt

  • Nuovo arrivato
  • *
  • Post: 23
  • Respect: 0
    • Mostra profilo
Re:Lanciare ImageView in subActivity
« Risposta #4 il: 01 Febbraio 2012, 20:19:52 CET »
0

C'era un dannato refuso nel codice che non avevo decommentato, scusa :-( ora va.
Ne approfitto per chiederti se la Stringa "./res/drawable-mdpi/foto1.jpg" è corretta come modo di trovare l'immagine, perchè la foto non si vede (ma la subApp parte).
Inoltre da dentro l'emulatore come faccio ad accedere a questa cartella (/res/drawable)?

Grazie ancora
« Ultima modifica: 01 Febbraio 2012, 21:12:33 CET da DirkPitt »

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Lanciare ImageView in subActivity
« Risposta #5 il: 01 Febbraio 2012, 22:41:44 CET »
0
No, per visualizzare una risorsa drawable in un'imageView, tra le varie possibiltà, il metodo più diretto è imageview.setImageResource(Id), dove id è un R.drawable.tuo_drawable . Per accedere alle risorse devi usare la classe Resources, di cui puoi ottenere un'istanza con Context.getResources(). Al 99% credo non ci sia un modo per accedere direttamente alla directory res/drawable.

Offline DirkPitt

  • Nuovo arrivato
  • *
  • Post: 23
  • Respect: 0
    • Mostra profilo
Re:Lanciare ImageView in subActivity
« Risposta #6 il: 02 Febbraio 2012, 09:50:04 CET »
0
Ok grazie anche per la pazienza; il probl. è che io voglio ottenere il nome della foto accedendo ad un database sqlite quindi non posso ottenere l'id (almeno per le mie scarse conoscenze). Quindi dato che prendo dal db il nome delle foto devo per forza sperare che esse siano tutte nella cartella /res/drawable per poterle visualizzare? So che va oltre l'argomento di questo topic (devo aprirne un altro?), ma mi puoi dire come risolvere?
« Ultima modifica: 02 Febbraio 2012, 10:20:53 CET da DirkPitt »

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Lanciare ImageView in subActivity
« Risposta #7 il: 02 Febbraio 2012, 11:28:48 CET »
0
Hai due possibilità: o usi il metodo Assets.getIdentifier(), oppure, più semplicemente, la salvi nella cartella assets oppure raw e fai il tutto con i metodi della classe AssetManager o Resources.
Dai anche un'occhiata qui: Providing Resources | Android Developers

Offline DirkPitt

  • Nuovo arrivato
  • *
  • Post: 23
  • Respect: 0
    • Mostra profilo
Re:Lanciare ImageView in subActivity
« Risposta #8 il: 02 Febbraio 2012, 12:12:32 CET »
0
OK grz, però in questo modo se io scatto una foto con il cellulare e poi voglio inserirla tra quelle visualizzabili come ce la vado a mettere nella cartella assets dell'applicazione ?

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Lanciare ImageView in subActivity
« Risposta #9 il: 02 Febbraio 2012, 12:53:08 CET »
+1
Per le foto che sono sull'sd usi la classe File di java.

Offline DirkPitt

  • Nuovo arrivato
  • *
  • Post: 23
  • Respect: 0
    • Mostra profilo
Re:Lanciare ImageView in subActivity
« Risposta #10 il: 02 Febbraio 2012, 13:04:24 CET »
0
Ok, in realtà la faccenda non mi è del tutto chiara perchè in questo dovrei salvare nel db l' absolutepath della foto il che non è proprio comodo. Cmq vedrò come fare, grazie ancora, atn!

Offline DirkPitt

  • Nuovo arrivato
  • *
  • Post: 23
  • Respect: 0
    • Mostra profilo
Re:Lanciare ImageView in subActivity
« Risposta #11 il: 03 Febbraio 2012, 14:42:26 CET »
0
Ciao,
scusa riprendo la discussione per chiederti spiegazioni su come trovare il percorso corretto di un file dato che non ci riesco!

Copio il codice: prima prendo il percorso di un file dal click a schermo su di esso e poi provo ad aprirlo con una activity ACTION_VIEW.

Codice (Java): [Seleziona]
Intent in = new Intent(Intent.ACTION_GET_CONTENT);
in.setType("image/*");
startActivityForResult(in, RITORNO_FILE_ADD);

Codice (Java): [Seleziona]
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                if (requestCode == RITORNO_FILE_ADD) {
                        if (resultCode == RESULT_OK) {
                                String filePath = data.getData().getPath();
                                File sd = Environment.getExternalStorageDirectory();
                                File f = new File (sd,path);
                                Uri img = Uri.fromFile(f);
                                Intent intent = new Intent();
                                intent.setAction(Intent.ACTION_VIEW);
                                intent.setDataAndType(img,"image/*");
                                startActivity(intent);
                        }
                }

Il risultato è che si apre il visualizzatore di immagini ma l'immagine non viene caricata (rimane lo schermo nero).