Autore Topic: Errore AsyncTask  (Letto 379 volte)

Offline oberdank

  • Utente normale
  • ***
  • Post: 287
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Core LTE
  • Play Store ID:
    BuzzOne
  • Sistema operativo:
    Windows 8.1
Errore AsyncTask
« il: 04 Settembre 2014, 17:49:48 CEST »
0
Il seguente programma dovrebbe visualizzare un'immagine, invece NON funziona, PERCHE?

Nel file XML relativo al programma e' presente una ImageView con id "remote_image"

Nel codice come immagine da caricare e' scritto "http://wanderingoak.net/bridge.png", come si fa a caricare
un'immage NON dal web ma dall'hard-disk?

Codice (Java): [Seleziona]
package com.provaproject_22;

import java.net.*;
import java.io.*;

import android.support.v7.app.ActionBarActivity;
import android.graphics.*;
import android.os.*;
import android.view.*;
import android.view.MenuItem;
import android.widget.*;

public class MainActivity extends ActionBarActivity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
               
                id=new ImageDownLoader();
                id.execute("http://wanderingoak.net/bridge.png");
        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
                // Inflate the menu; this adds items to the action bar if it is present.
                getMenuInflater().inflate(R.menu.main, menu);
                return true;
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
                // Handle action bar item clicks here. The action bar will
                // automatically handle clicks on the Home/Up button, so long
                // as you specify a parent activity in AndroidManifest.xml.
                int id = item.getItemId();
                if (id == R.id.action_settings) {
                        return true;
                }
                return super.onOptionsItemSelected(item);
        }
       
        class ImageDownLoader extends AsyncTask<String, Integer, Bitmap>
        {
                public void onPreExecute() {  }
               
                @Override
                public Bitmap doInBackground(String[] params)
                {
                        try
                        {
                                URL url=new URL(params[0]);
                                HttpURLConnection httpCon=(HttpURLConnection) url.openConnection();
                                if (httpCon.getResponseCode()!=200)
                                {
                                        Toast.makeText(this,"Errore connessione", Toast.LENGTH_LONG).show();
                                }
                                InputStream is=httpCon.getInputStream();
                                return BitmapFactory.decodeStream(is);
                        }
                        catch (Exception e)
                        {
                                Toast.makeText(this,e.toString(), Toast.LENGTH_LONG).show();
                        }
                        return null;
                }
               
                public void onProgressUpdate(Integer[] params) { }
                public void onPostExecute(Bitmap img)
                {
                        ImageView iv=(ImageView) findViewById(R.id.remote_image);
                        if (iv!=null && img!=null)
                                iv.setImageBitmap(img);
                }
                public void onCancelled() { }
        }
       
}

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:Errore AsyncTask
« Risposta #1 il: 04 Settembre 2014, 18:28:39 CEST »
0
Per questa tipologia di problemi, ti consiglio di usare la libreria Picasso ( Picasso ) .

Ti consente di sostituire tutto il codice che hai scritto con UNA riga:

Codice (Java): [Seleziona]
Picasso.with(context).load("http://wanderingoak.net/bridge.png").into(imageView);
Se necessario, sempre nella stessa unica riga, puoi impostare un resize, un'immagine di placeholder in attesa dello scaricamento e volendo anche attivare la cache.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store