1

我有只出现在Froyo的设备我不得不修正错误的NullPointerException

的NullPointerException在Bitmap.createScaledBitmap错误()

java.lang.RuntimeException: An error occured while executing doInBackground() 
at android.os.AsyncTask$3.done(AsyncTask.java:200) 
at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274) 
at java.util.concurrent.FutureTask.setException(FutureTask.java:125) 
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308) 
at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 
at java.lang.Thread.run(Thread.java:1019) 
Caused by: java.lang.NullPointerException 
at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:344) 
at com.varxstudio.beautifulwallpapersLite.Imagen.a(Unknown Source) 
at com.varxstudio.beautifulwallpapersLite.g.a(Unknown Source) 
at com.varxstudio.beautifulwallpapersLite.g.doInBackground(Unknown Source) 
at android.os.AsyncTask$2.call(AsyncTask.java:185) 
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) 

和这里是代码的任何溶液??为什么只在froyo ??? 以前只是用于BitmapFactory.decodeStream(的inputStream)加载图像,但我发现了一个flusedInputStream方法来做到这一点,但我仍然得到同样的错误

private class DownloadDialog extends AsyncTask<Void, Void, Void> { 

    ProgressDialog myDialog = null; 
    int result = 0; 

    @Override 
    protected void onPreExecute() { 
     myDialog = ProgressDialog.show(Imagen.this, "", advert); 
     myDialog.setCancelable(true); 
     return; 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     result = setWallpaper(path); 

     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     myDialog.dismiss(); 
     switch (result){ 
      ---- 
     } 
     return; 
    } 
} 

public int setWallpaper(String path) {   
    int width, height; 
    Bitmap dbm, bm;   
    bm = null; 
    dbm = null; 
    InputStream is = null; 

    WallpaperManager wpm = WallpaperManager.getInstance(this); 
    dis = getWindowManager().getDefaultDisplay();   

    if((wpm != null) && (dis != null)){ 
     height = dis.getHeight(); 
     width = (int) (height * 1.33);    

     try {   
      URLConnection conn = new URL(path).openConnection();     
      conn.connect();    
      is = conn.getInputStream();    

      if (is != null) {     
       bm = BitmapFactory.decodeStream(new FlushedInputStream(is));      
       dbm = Bitmap.createScaledBitmap(bm, width, height, false); 
       wpm.setBitmap(dbm);     
      }else { 
       return 2; 
      } 

     } catch (MalformedURLException e) {     
      e.printStackTrace();     
     } catch (IOException e) {    
      e.printStackTrace();     
     } finally {    
      if (is != null) { 
       try { 
        is.close(); 
       } 
       catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     }   
     if(bm != null){ 
      bm.recycle(); 
     } 
     if(dbm != null){ 
      dbm.recycle(); 
     }   
    }else { 
     return 1; 
    } 
    return 0; 
} 

static class FlushedInputStream extends FilterInputStream { 
    public FlushedInputStream(InputStream inputStream) { 
     super(inputStream); 
    } 

    @Override 
    public long skip(long n) throws IOException { 
     long totalBytesSkipped = 0L; 
     while (totalBytesSkipped < n) { 
      long bytesSkipped = in.skip(n - totalBytesSkipped); 
      if (bytesSkipped == 0L) { 
       int b = read(); 
       if (b < 0) { 
        break; // we reached EOF 
       } else { 
        bytesSkipped = 1; // we read one byte 
       } 
      } 
      totalBytesSkipped += bytesSkipped; 
     } 
     return totalBytesSkipped; 
    } 
} 
+0

'bm' null?如果图像无法处理,'decodeStream'返回null。 – Geobits 2013-02-15 18:06:46

回答

4

你已经得到了空指针异常,因为 BitmapFactory.decodeStream(new FlushedInputStream(is));返回null,原因BitmapFactory.decodeStream(stream)返回null是因为不好的图像。 不好的图像在这个意义上确保你正在返回Android支持的位图格式(例子Android doesn't support tiff)。第二个原因是因为图像分辨率,如果图像分辨率太高,解码失败..所以确保你有小图像。

这是我已经发布的SO关于同一.. Bitmap failed to create using BitmapFactory.decodeArray

我都面临着同样的问题,前面这个问题,但我已经在通过使用Android开发者网站提供的教程来它Displaying Bitmaps Efficiently

相关问题