【问题标题】:Android: Receiving NullPointerException when initialize a Canvas objectAndroid:初始化 Canvas 对象时收到 NullPointerException
【发布时间】:2013-04-08 07:02:34
【问题描述】:

当代码进入画布初始化时,我有 NullPointerException。创建画布时,我将一个空白位图传递给它。

这是发生空指针异常的代码。

    private static Bitmap createScaledBitmap(Bitmap unscaledBitmap, int dstWidth, int dstHeight, ScalingLogic scalingLogic) {

      Rect srcRect = calculateSrcRect(unscaledBitmap.getWidth(), unscaledBitmap.getHeight(), dstWidth, dstHeight, scalingLogic);

      Rect dstRect = calculateDstRect(unscaledBitmap.getWidth(), unscaledBitmap.getHeight(), dstWidth, dstHeight, scalingLogic);

      Bitmap scaledBitmap = Bitmap.createBitmap(dstRect.width(), dstRect.height(), Config.ARGB_8888);

      Canvas canvas = new Canvas(scaledBitmap);

      canvas.drawBitmap(unscaledBitmap, srcRect, dstRect, new Paint(Paint.FILTER_BITMAP_FLAG));

      return scaledBitmap;

}

这是代码的堆栈跟踪。

java.lang.RuntimeException:无法启动活动 ComponentInfo{com.android.PhotoEditActivity}:java.lang.NullPointerException 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 在 android.app.ActivityThread.access$2300(ActivityThread.java:125) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper.java:123) 在 android.app.ActivityThread.main(ActivityThread.java:4627) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:521) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 在 dalvik.system.NativeStart.main(本机方法) 引起:java.lang.NullPointerException 在 android.graphics.Canvas.(Canvas.java:82) 在 ImageManupulator.createScaledBitmap(ImageManupulator.java:101) 在 utils.ImageManupulator.ImageResizing(ImageManupulator.java:27) 在 android.PhotoEditActivity.updatePhoto(PhotoEditActivity.java:219) 在 android.PhotoEditActivity.access$0(PhotoEditActivity.java:211) 在 android.PhotoEditActivity$2.onItemClick(PhotoEditActivity.java:279) 在 android.widget.AdapterView.performItemClick(AdapterView.java:284) 在 android.PhotoEditActivity.onCreate(PhotoEditActivity.java:128) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) ... 11 更多

【问题讨论】:

  • ImageManupulator.java: 101 是哪一行?
  • unscaledBitmap 可能就是null
  • 您在静态函数中声明和绘制位图。只需在函数参数中传递画布并在函数中绘制位图即可。
  • eightx2 可能是未缩放的位图。是否有机会 unscaledBitmap.getWidth() 或 unscaledBitmap.getHeight() 返回 0 或 -1。因为我认为这是导致问题的原因。如果 unscaledBitmap 为 null,getWidth 和 getHeight 部分代码将在初始化 Canvas 的行之前抛出错误。

标签: android image canvas nullpointerexception


【解决方案1】:

无论您在何处调用此方法,请检查您的参数 unscaledBitmap 和 scalingLogic 是否为空,因为这两个只是您的方法实现中使用的对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-02
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    相关资源
    最近更新 更多