2014-05-09 9 views
8

Ich versuche, ein Bild von URL zu einem ImageView zu laden, aber der Fehler tritt auf: SkImageDecoder :: Factory gab null zurück. Wie kann ich es reparieren?Android SkImageDecoder :: Factory zurückgegeben Null Fehler

hier ist mein Code:

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); 
     } 
    } 

Antwort

17

gelöst. Ändern Sie den Code zu diesem.

@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

Dies funktionierte für mich nach einem ganzen Tag der versuchen andere Lösungen. – Scutterman

+0

@Scutterman wie kann ich das mit btn click event –

+0

@johnson hinzufügen Erstellen Sie einfach eine Klasse, die AsyncTask wie Simon in seiner Frage erweitert hat. Erstellen Sie im Click-Ereignis der Schaltfläche eine neue Instanz Ihrer Klasse und führen Sie sie aus. Die Android-Dokumente haben mehr Informationen http://developer.android.com/reference/android/os/AsyncTask.html – Scutterman

Verwandte Themen