View.startDrag抛出NPE,这对我来说是针对Android API 15而不是API 22.
这个问题很容易重现。打开Android Studio,使用API 15创建一个包含一个空白活动的模板项目。将以下逻辑添加到浮动操作按钮:
fab.setOnLongClickListener(
new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
v.startDrag(ClipData.newPlainText("", ""), new View.DragShadowBuilder(v), null, 0);
return true;
}
}
);
错误的堆栈跟踪如下:
E/View: Unable to initiate drag
java.lang.NullPointerException
at android.view.Surface.lockCanvas(Surface.java:77)
at android.view.View.startDrag(View.java:13869)
at test.dragdroptest.MainActivity$2.onLongClick(MainActivity.java:59)
at android.view.View.performLongClick(View.java:3827)
at android.view.View$CheckForLongPress.run(View.java:14571)
at android.os.Handler.handleCallback(Handler.java:605)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4424)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)
不确定我在这里做错了什么。我一直在争论这个问题两天,网上的资源不多。我无法相信没有其他人遇到同样的问题......
答案 0 :(得分:0)
显然,它只发生在我用于测试的设备上,而不是来自具有相同API级别的模拟器。我想我无法摆脱这个问题:(