NullPointerException: attempt to call the virtual method 'int android.graphics.Bitmap.getWidth ()'

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 get error as below.

java.lang.NullPointerException: attempt to call the virtual method 'int android.graphics.Bitmap.getWidth ()' to reference the null object in com.adapter.CategoryAdapter.getBitmap (CategoryAdapter.java:92) in com.adapter.CategoryAdapter.getView (CategoryAdapter.java:75) in android.widget.AbsListView.obtainView (AbsListView.java:2896) in android.widget.GridView.makeAndAddView (GridView.java:1456) in android.widget.GridView.makeRow (GridView.java: 361) at android.widget.GridView.fillDown (GridView.java:302) in android.widget.GridView.fillFromTop (GridView.javarige37) in the file android.widget.GridView.layoutChildren (GridView.java:1284) in android .widget.AbsListView.onLayout (AbsListView.java:2700) at android.view.View.layout (View.java:16899) ​​in android.view.ViewGroup.layout (ViewGroup.java∗405) on andr oid.widget.RelativeLayout.onLayout (RelativeLayout.java:1077) at android.view.View.layout (View.java:16899) ​​in android.view.ViewGroup.layout (ViewGroup.java∗405) on android.widget.FrameLayout .layoutChildren (FrameLayout.java∗79) in android.widget.FrameLayout.onLayout (FrameLayout.java//14) at android.view.View.layout (View.java:16899) ​​in android.view.ViewGroup.layout (ViewGroup. java: 5405) in the file android.support.v4.widget.DrawerLayout.onLayout (DrawerLayout.java:1043) at android.view.View.layout (View.java:16899) ​​in android.view.ViewGroup.layout (ViewGroup. java: 5405) on android.widget.LinearLayout.setChildFrame (LinearLayout.java:1702) on android.widget.LinearLayout.layoutVertical (LinearLayout.java:1556) on android.widget.LinearLayout.onLayout (LinearLayout) atjava: android.view.View.layout (View.java:16899) ​​in a ndroid.view.ViewGroup.layout (ViewGroup.javaPoint405) on android.widget.RelativeLayout.onLayout (RelativeLayout.java:1077) at android.view.View.layout (View.java:16899) ​​in android.view.ViewGroup .layout (ViewGroup.java//405) on android.widget.FrameLayout.layoutChildren (FrameLayout.java//79) in android.widget.FrameLayout.onLayout (FrameLayout.java UP14) at android.view.View.layout (View. java: 16899) ​​on android.widget.LinearLayout.layoutVertical (LinearLayout.java:1556) on android.view.ViewGroup.layout (ViewGroup.java► 405) on android.widget.LinearLayout.setChildFrame (LinearLayout.java:1702) android.widget.LinearLayout.onLayout (LinearLayout.java:1465) at android.view.View.layout (View.java:16899) ​​in android.view.ViewGroup.layout (ViewGroup.java∗405) on android.widget.FrameLayout .layoutChildren (FrameLayout.java∗79) in andr oid.widget.FrameLayout.onLayout (FrameLayout.java UP14) at android.view.View.layout (View.java:16899) ​​in android.view.ViewGroup.layout (ViewGroup.java UP405) on android.widget.LinearLayout .setChildFrame (LinearLayout.java:1702) on android.widget.LinearLayout.layoutVertical (LinearLayout.java:1556) on android.widget.LinearLayout.onLayout (LinearLayout.java:1465) at android.view.View.layout (View. java: 16899) ​​in android.widget.FrameLayout.onLayout (FrameLayout.java//1414) at android.view.ViewGroup.layout (ViewGroup.java► 1405) at android.widget.FrameLayout.layoutChildren (FrameLayout.java► 079) android.view.View.layout (View.java:16899) ​​in android.view.ViewGroup.layout (ViewGroup.java=405)

How can i solve this?

+5
source share
2 answers

Error tracing indicates that the error 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) :

  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 returns null if the image data cannot be decoded. Note the logs such as E/BitmapFactory: Unable to decode stream: ... to find out this method, why it failed. You may have indicated the wrong path.

+4
source

In my case, the problem was that I was calling "decodeFile" in the background thread, which returned null. Moving this code to the main thread fixes the problem.

0
source

Source: https://habr.com/ru/post/1234521/


All Articles