【发布时间】:2014-12-17 22:06:21
【问题描述】:
我正在开发 SoftKeyboard,我需要在按键上显示文本 下面用红色块表示
鉴于in this reference 和this reference,我使用以下代码,
protected void onDraw(Canvas canvas) {
if (canvas != null) {
super.onDraw(canvas);
}
Paint paint = new Paint();
paint.setTextSize(15);
paint.setColor(Color.RED);
int x2 = 0;
int y2 = 0;
int width = 0;
List<Key> keys = SoftKeyboard.currentKeyboard.getKeys();
for(Key key: keys) {
if(key.codes[0] == 113)
x2 = key.x; // value of x2 = 0;
y2 = key.y; // value of y2 = 0;
width = key.width; // value of width = 32;
canvas.drawText("1", x2 + (width/2), y2 + 5, paint); // getting null pointer exception here line 240
}
}
我的堆栈跟踪如下所示
> FATAL EXCEPTION: main java.lang.NullPointerException at com.example.android.softkeyboard.CandidateView.onDraw(CandidateView.java:240) 在 com.example.android.softkeyboard.CandidateView.setSuggestions(CandidateView.java:279) 在 com.example.android.softkeyboard.SoftKeyboard.setSuggestions(SoftKeyboard.java:597) 在 com.example.android.softkeyboard.SoftKeyboard.updateCandidates(SoftKeyboard.java:582) 在 com.example.android.softkeyboard.SoftKeyboard.onFinishInput(SoftKeyboard.java:260) 在 android.inputmethodservice.InputMethodService.doFinishInput(InputMethodService.java:1543) 在 android.inputmethodservice.InputMethodService.doStartInput(InputMethodService.java:1552) 在 android.inputmethodservice.InputMethodService$InputMethodImpl.startInput(InputMethodService.java:390) 在 android.inputmethodservice.IInputMethodWrapper.executeMessage(IInputMethodWrapper.java:158) 在 com.android.internal.os.HandlerCaller$MyHandler.handleMessage(HandlerCaller.java:61) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper.java:153) 在 android.app.ActivityThread.main(ActivityThread.java:5000) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:511) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584) 在 dalvik.system.NativeStart.main(本机方法)10-19 13:26:04.844: E/Trace(17693):打开跟踪文件时出错:没有这样的文件或目录 (2)
我在调试代码时检查过画布始终为空,所以 我认为由于画布为空,我得到了这个异常。
所以我得到了这个异常,因为画布为空或问题出在 其他任何地方。
还有一件事我也尝试过使用 popupCharacters 和这个 正在工作,但我需要 3 个字符,如下所示,
这就是为什么我试图在画布上绘画但得到 例外。
【问题讨论】:
-
这个异常的发生正是因为 canvas 为空。除非使用 null 参数调用该方法,否则我看不出它在 onDraw 方法中应该为 null 的原因,因此您接下来应该尝试弄清楚为什么使用 null 画布调用它。你能发布 CandidateView.setSuggestions 下一个吗?
标签: key label android-softkeyboard multiline