NullPointerException: Attempt to invoke virtual method 'int android.graphics.Bitmap.getWidth()'

匿名 (未验证) 提交于 2019-12-03 02:30:02

问题:

public class CategoryAdapter extends BaseAdapter { Context context; ArrayList<ModelCategory> model; LayoutInflater layoutInflater;  public CategoryAdapter(Activity activity, ArrayList<ModelCategory> model) {     this.model = model;     this.context = activity; }  @Override public int getCount() {     return model.size(); }  @Override public Object getItem(int position) {     return null; }  @Override public long getItemId(int position) {     return position; }  @Override public View getView(int position, View convertView, ViewGroup parent) {      ViewHolder viewHolder = null;     layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);     if (convertView == null) {         viewHolder = new ViewHolder();         convertView = layoutInflater.inflate(R.layout.category_adapter, parent, false);         viewHolder.imageView = (ImageView) convertView.findViewById(R.id.category_grid_image);         viewHolder.textView = (TextView) convertView.findViewById(R.id.get_category_title);         convertView.setTag(viewHolder);      } else {         viewHolder = (ViewHolder) convertView.getTag();     }      viewHolder.textView.setText(model.get(position).getCategoryName());     if(position<=3){         viewHolder.imageView.setImageBitmap(StringToBitMap(model.get(position).getCategoryImage()));     }     else {         viewHolder.imageView.setImageBitmap(getBitmap(model.get(position).getCategoryImage()));     }     return convertView; }  private class ViewHolder {     public ImageView imageView;     public TextView textView; }  private Bitmap getBitmap(String path) {      BitmapFactory.Options option = new BitmapFactory.Options();     option.inSampleSize = 8;     Bitmap bitmap = BitmapFactory.decodeFile(path, option);     Matrix matrix = new Matrix();     matrix.postRotate(getImageOrientation(path));     Bitmap rotatedBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);     Bitmap resized = Bitmap.createScaledBitmap(rotatedBitmap, 150, 150, true);     return resized; }   private static int getImageOrientation(String imagePath) {     int rotate = 0;     try {         File imageFile = new File(imagePath);         ExifInterface exif = new ExifInterface(                 imageFile.getAbsolutePath());         int orientation = exif.getAttributeInt(                 ExifInterface.TAG_ORIENTATION,                 ExifInterface.ORIENTATION_NORMAL);          switch (orientation) {             case ExifInterface.ORIENTATION_ROTATE_270:                 rotate = 270;                 break;             case ExifInterface.ORIENTATION_ROTATE_180:                 rotate = 180;                 break;             case ExifInterface.ORIENTATION_ROTATE_90:                 rotate = 90;                 break;         }     } catch (IOException e) {         e.printStackTrace();     }      return rotate; }   public Bitmap StringToBitMap(String encodedString){     try {         byte [] encodeByte=Base64.decode(encodedString, Base64.DEFAULT);         Bitmap bitmap=BitmapFactory.decodeByteArray(encodeByte, 0, encodeByte.length);         return bitmap;     } catch(Exception e) {         e.getMessage();         return null;     } } 

}

I am getting error like below..

java.lang.NullPointerException: Attempt to invoke virtual method 'int android.graphics.Bitmap.getWidth()' on a null object reference at com.adapter.CategoryAdapter.getBitmap(CategoryAdapter.java:92) at com.adapter.CategoryAdapter.getView(CategoryAdapter.java:75) at android.widget.AbsListView.obtainView(AbsListView.java:2896) at android.widget.GridView.makeAndAddView(GridView.java:1456) at android.widget.GridView.makeRow(GridView.java:361) at android.widget.GridView.fillDown(GridView.java:302) at android.widget.GridView.fillFromTop(GridView.java:437) at android.widget.GridView.layoutChildren(GridView.java:1284) at android.widget.AbsListView.onLayout(AbsListView.java:2700) at android.view.View.layout(View.java:16899) at android.view.ViewGroup.layout(ViewGroup.java:5405) at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1077) at android.view.View.layout(View.java:16899) at android.view.ViewGroup.layout(ViewGroup.java:5405) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579) at android.widget.FrameLayout.onLayout(FrameLayout.java:514) at android.view.View.layout(View.java:16899) at android.view.ViewGroup.layout(ViewGroup.java:5405) at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:1043) at android.view.View.layout(View.java:16899) at android.view.ViewGroup.layout(ViewGroup.java:5405) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1702) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1556) at android.widget.LinearLayout.onLayout(LinearLayout.java:1465) at android.view.View.layout(View.java:16899) at android.view.ViewGroup.layout(ViewGroup.java:5405) at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1077) at android.view.View.layout(View.java:16899) at android.view.ViewGroup.layout(ViewGroup.java:5405) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579) at android.widget.FrameLayout.onLayout(FrameLayout.java:514) at android.view.View.layout(View.java:16899) at android.view.ViewGroup.layout(ViewGroup.java:5405) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1702) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1556) at android.widget.LinearLayout.onLayout(LinearLayout.java:1465) at android.view.View.layout(View.java:16899) at android.view.ViewGroup.layout(ViewGroup.java:5405) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579) at android.widget.FrameLayout.onLayout(FrameLayout.java:514) at android.view.View.layout(View.java:16899) at android.view.ViewGroup.layout(ViewGroup.java:5405) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1702) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1556) at android.widget.LinearLayout.onLayout(LinearLayout.java:1465) at android.view.View.layout(View.java:16899) at android.view.ViewGroup.layout(ViewGroup.java:5405) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579) at android.widget.FrameLayout.onLayout(FrameLayout.java:514) at android.view.View.layout(View.java:16899) at android.view.ViewGroup.layout(ViewGroup.java:5405)

How can I solve this?

回答1:

Error traces show that error occours on

Bitmap bitmap = BitmapFactory.decodeFile(path, option); Bitmap rotatedBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); 

As the documentation of the public static Bitmap decodeFile(String pathName, Options opts) method:

 return The decoded bitmap, or null if the image data could not be  decoded, or, if opts is non-null, if opts requested only the  size be returned (in opts.outWidth and opts.outHeight) 

This method will return null, if the image data could not be decoded. Note logs like E/BitmapFactory: Unable to decode stream: ... to find out this method why failed. Maybe you provided a wrong path.



回答2:

The problem in my case was that I was calling 'decodeFile' in background thread which was returning null. Moving that code to main thread fixed the problem.



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!