Autore Topic: Scaricare foto dal web e inserirla come sfondo di un bottone  (Letto 337 volte)

Offline 0882

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nessuno
Scaricare foto dal web e inserirla come sfondo di un bottone
« il: 21 Giugno 2014, 22:09:26 CEST »
0
Sera ! ;-)
Ho fatto diverse ricerche nel forum e anche sulla rete e non sono venuto a capo del mio problema, o per lo meno, non sono riuscito completamente a risolvere il problema.
Ho provato con questo codice:
Codice (Java): [Seleziona]
  try {
                    java.net.URL url = new java.net.URL("urldellimmagine");
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                    connection.setDoInput(true);
                    connection.connect();
                    InputStream input = connection.getInputStream();
                    Bitmap myBitmap = BitmapFactory.decodeStream(input);
                    ImageButton im = (ImageButton) findViewById(R.id.buttonchevogliomodificare);
                    im.setImageBitmap(myBitmap);
                } catch (IOException e) {
                    e.printStackTrace();
                }

Tutto questo codice l'ho inserito in un evento onclick di un altro bottone (es. bottone1), in modo che alla pressione di quel bottone (bottone1) modifico lo sfondo di un altro bottone (bottone2).
Ho provato anche a utilizzare questo codice con task asincrono, per non far pesare di molto l'operazione di scaricamento dell'immagine. Volevo anche provare con un thread ma non sapevo cosa passare  all'handler per poi modificare il bottone, dato che nn so quale put utilizzare con la classe bundle visto che quello che passavo era una Bitmap.

Ad ogni modo, tutti questi tentativi li ho provati con l'emulatore (non con il cellulare), ma l'applicazione continua a chiudersi dopo queste operazioni non modificando lo sfondo del bottone2 e dando come errore "Unfortunately, mioproj has stopped."

logcat:
esempio di log usando un "AsyncTask" e inserendo tutto quel codice in doInBackground tranne ovviamente la parte di settaggio dell'immagine sul bottone ovvero:
Codice (Java): [Seleziona]
ImageButton im = (ImageButton) findViewById(R.id.button2);
            im.setImageBitmap(foto);
inserita in onProgressUpdate.

06-21 15:53:18.277    2031-2044/com.example.app E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
    java.lang.RuntimeException: An error occured while executing doInBackground()
            at android.os.AsyncTask$3.done(AsyncTask.java:299)
            at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
            at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
            at java.util.concurrent.FutureTask.run(FutureTask.java:239)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
            at java.lang.Thread.run(Thread.java:841)
     Caused by: java.lang.SecurityException: Permission denied (missing INTERNET permission?)
            at java.net.InetAddress.lookupHostByName(InetAddress.java:418)
            at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
            at java.net.InetAddress.getAllByName(InetAddress.java:214)
            at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70)
            at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
            at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
            at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
            at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
            at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)
            at libcore.net.http.HttpEngine.connect(HttpEngine.java:311)
            at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
            at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
            at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:81)
            at com.example.app.MainActivity$TaskAsincrono.doInBackground(MainActivity.java:54)
            at com.example.app.MainActivity$TaskAsincrono.doInBackground(MainActivity.java:34)
            at android.os.AsyncTask$2.call(AsyncTask.java:287)
            at java.util.concurrent.FutureTask.run(FutureTask.java:234)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
            at java.lang.Thread.run(Thread.java:841)
     Caused by: libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname)
            at libcore.io.Posix.getaddrinfo(Native Method)
            at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:61)
            at java.net.InetAddress.lookupHostByName(InetAddress.java:405)
            at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
            at java.net.InetAddress.getAllByName(InetAddress.java:214)
            at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70)
            at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
            at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
            at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
            at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
            at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)
            at libcore.net.http.HttpEngine.connect(HttpEngine.java:311)
            at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
            at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
            at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:81)
            at com.example.app.MainActivity$TaskAsincrono.doInBackground(MainActivity.java:54)
            at com.example.app.MainActivity$TaskAsincrono.doInBackground(MainActivity.java:34)
            at android.os.AsyncTask$2.call(AsyncTask.java:287)
            at java.util.concurrent.FutureTask.run(FutureTask.java:234)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
            at java.lang.Thread.run(Thread.java:841)
     Caused by: libcore.io.ErrnoException: getaddrinfo failed: EACCES (Permission denied)
            at libcore.io.Posix.getaddrinfo(Native Method)
            at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:61)
            at java.net.InetAddress.lookupHostByName(InetAddress.java:405)
            at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
            at java.net.InetAddress.getAllByName(InetAddress.java:214)
            at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70)
            at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
            at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
            at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
            at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
            at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)
            at libcore.net.http.HttpEngine.connect(HttpEngine.java:311)
            at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
            at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
            at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:81)
            at com.example.app.MainActivity$TaskAsincrono.doInBackground(MainActivity.java:54)
            at com.example.app.MainActivity$TaskAsincrono.doInBackground(MainActivity.java:34)
            at android.os.AsyncTask$2.call(AsyncTask.java:287)
            at java.util.concurrent.FutureTask.run(FutureTask.java:234)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
            at java.lang.Thread.run(Thread.java:841)



(Ho copiato e incollato solamente i log di colore rosso)
-Utilizzo android studio, ho impostato i permessi di internet
(forse questo problema accade solo nel caso si utilizzi un emulatore!)
Avete anche voi avuto problemi simili con l'emulatore?
Grazie in anticipo !
« Ultima modifica: 21 Giugno 2014, 22:13:19 CEST da 0882 »

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 774
  • Respect: +161
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 10 x64
Re:Scaricare foto dal web e inserirla come sfondo di un bottone
« Risposta #1 il: 04 Luglio 2014, 19:31:40 CEST »
0

Citazione
Caused by: java.lang.SecurityException: Permission denied (missing INTERNET permission?)

Devi specificare nel manifest il permesso di accedere alla rete.
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.