2014-05-09 15 views
8

Sto tentando di caricare un'immagine dall'URL a un ImageView ma si verifica l'errore: SkImageDecoder :: Factory ha restituito null. Come posso ripararlo?Android SkImageDecoder :: Factory restituito null Errore

Ecco il mio codice:

private class LoadImageFromURL extends AsyncTask<String, Void, Bitmap>{ 
     ImageView bitmapImgView; 
     public LoadImageFromURL(ImageView bmImgView){ 
      bitmapImgView = bmImgView; 
     } 

     @Override 
     protected Bitmap doInBackground(String... params) { 
      // TODO Auto-generated method stub 
      String urlStr = params[0]; 
      Bitmap img = null; 
      try { 
       URL url = new URL(urlStr); 
       InputStream inputStream = url.openConnection().getInputStream(); 
       //Options bmFactoryOpt = new Options(); 
       //bmFactoryOpt.inJustDecodeBounds = false; 
       img = BitmapFactory.decodeStream(inputStream);   
      } catch (MalformedURLException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      }  
      return img; 
     } 

     @Override 
     protected void onPostExecute(Bitmap bitmap){ 
      bitmapImgView.setImageBitmap(bitmap); 
     } 
    } 

risposta

17

risolto. Cambia il codice a questo.

@Override 
     protected Bitmap doInBackground(String... params) { 
      // TODO Auto-generated method stub 
      String urlStr = params[0]; 
      Bitmap img = null; 

      HttpClient client = new DefaultHttpClient(); 
      HttpGet request = new HttpGet(urlStr); 
      HttpResponse response; 
      try { 
       response = (HttpResponse)client.execute(request);   
       HttpEntity entity = response.getEntity(); 
       BufferedHttpEntity bufferedEntity = new BufferedHttpEntity(entity); 
       InputStream inputStream = bufferedEntity.getContent(); 
       img = BitmapFactory.decodeStream(inputStream); 
      } catch (ClientProtocolException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      return img; 
     } 
+0

Questo ha funzionato per me dopo un'intera giornata di provare altre soluzioni. – Scutterman

+0

@Scutterman come posso aggiungerlo usando l'evento click di btn –

+0

@johnson Basta creare una classe che estenda AsyncTask come Simon ha nella sua domanda. Nell'evento click del pulsante, crea una nuova istanza della classe ed eseguila. I documenti Android hanno più informazioni http://developer.android.com/reference/android/os/AsyncTask.html – Scutterman

Problemi correlati