在调用自定义view中的方法进行画点时报空指针异常

幻想月靡 2016-04-01 08:40:47
在CustomView类中的方法:
public void pointPaint(int rssi){


Resources r = getResources();
//第二个参数就是发光点的源文件
Bitmap bp= BitmapFactory.decodeResource(r, R.drawable.component_radar_light_point);
//int randomNum= (int) (Math.random()*Math.abs(rssi));
//canvas.drawBitmap(bp,x+randomNum,y+randomNum,paint);

customCanvas.drawBitmap(bp, 320, 480, customPaint);
customCanvas.drawBitmap(bp, 240, 130, customPaint);
customCanvas.drawBitmap(bp, 170, 220, customPaint);
customCanvas.drawBitmap(bp, 180, 100, customPaint);
customCanvas.drawBitmap(bp, 460, 400, customPaint);
customCanvas.drawBitmap(bp, 200, 249, customPaint);
customCanvas.drawBitmap(bp, 316, 210, customPaint);

}

在activity中调用:
customViewByMySelf= (CustomViewByMySelf) findViewById(R.id.customView_DetailDistance);
customViewByMySelf=new CustomViewByMySelf(this,null);

customViewByMySelf.pointPaint(rssi);



Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.graphics.Canvas.drawBitmap(android.graphics.Bitmap, float, float, android.graphics.Paint)' on a null object reference
at tools.CustomViewByMySelf.pointPaint(CustomViewByMySelf.java:138)
at com.example.administrator.bluetoothseekingforproject.DetailDistance.onCreate(DetailDistance.java:51)
at android.app.Activity.performCreate(Activity.java:6147)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1112)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2498)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2625)
            at android.app.ActivityThread.access$700(ActivityThread.java:183)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1484)
            at android.os.Handler.dispatchMessage(Handler.java:111)
            at android.os.Looper.loop(Looper.java:194)
            at android.app.ActivityThread.main(ActivityThread.java:5667)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:962)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757)



请问是调用顺序的问题么?该怎么解决?
...全文
187 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
幻想月靡 2016-04-01
  • 打赏
  • 举报
回复
引用 3 楼 bdmh 的回复:
第几行错误,都告诉你了,断点看看是不是对象没找到
抱歉,可能我表述的不清,我的意思是在activity中调用pointpaint方法就会报canvans的空指针,而在onDraw中调用就没问题 我想寻求的是怎么在activity中正确使用pointpainter而不是在我自定义的view类中的onDraw使用?Get和Set方法用过后依然会报空指针,得不到想要的对象
bdmh 2016-04-01
  • 打赏
  • 举报
回复
第几行错误,都告诉你了,断点看看是不是对象没找到
幻想月靡 2016-04-01
  • 打赏
  • 举报
回复
引用 1 楼 assky124 的回复:
打断点调试 你绘图不是应该放在onDraw函数中么
剩下的那些图形绘制都在onDraw里,只不过这个点的绘制需要根据activity中的条件来绘制。打过断点,就是在canvas绘点的时候有问题,如果在onDraw中调用pointPaint方法就不会有问题,但是在activity中调用就是会空指针
assky124 2016-04-01
  • 打赏
  • 举报
回复
打断点调试 你绘图不是应该放在onDraw函数中么
墨泉v 2016-04-01
  • 打赏
  • 举报
回复
customViewByMySelf= (CustomViewByMySelf) findViewById(R.id.customView_DetailDistance); customViewByMySelf=new CustomViewByMySelf(this,null); 还有你的这个代码也是够奇葩的
墨泉v 2016-04-01
  • 打赏
  • 举报
回复
onDraw里面是因为view都已经加载完成了所以可以绘制,你自己调用的话必须要view加载完成才行,可以用handler等方法通知
jklwan 2016-04-01
  • 打赏
  • 举报
回复
你先findviewbyid找到你的view,然后view等于new的一个对象?这么做的原因是什么呢

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧