में NullPointerException प्राप्त होता है मेरे पास एक ग्रिड व्यू है। ग्रिड व्यू में से प्रत्येक आइटम एक क्षैतिज (या लंबवत) लेआउट है (अभिविन्यास के आधार पर)। उस लेआउट के अंदर एक छवि दृश्य और एक टेक्स्ट व्यू है।ऑन लोंगप्रेस के बाद, ग्रिडव्यू में पहली बार स्टार्ट ड्रग
जब मैं ग्रिड व्यू में पहले के अलावा किसी भी छवि दृश्य पर "लांग टच" करता हूं, तो सब कुछ योजनाबद्ध के रूप में कार्य करता है। ऑन लोंगप्रेस() हैंडलर में, मैं ImageView पर startDrag को कॉल करता हूं और सब कुछ योजनाबद्ध के रूप में काम करता है। यदि मैं ग्रिड व्यू में पहली छवि दृश्य पर "लांग टच" करता हूं, तो मुझे एंड्रॉइड व्यू की startDrag() विधि में एक NullPointer अपवाद मिलता है। एक ClipData, एक DragShadowBuilder, और LocalState के रूप में मेरे imageView -
08-16 10:11:04.425: E/View(2456): Unable to initiate drag
08-16 10:11:04.425: E/View(2456): java.lang.NullPointerException
08-16 10:11:04.425: E/View(2456): at android.view.View.startDrag(View.java:16281)
08-16 10:11:04.425: E/View(2456): at org.xyzzy.test.GridLauncher$ShortCutTouchListener$ShortcutGestureListener.onLongPress(RemoteLauncher.java:650)
08-16 10:11:04.425: E/View(2456): at android.view.GestureDetector.dispatchLongPress(GestureDetector.java:675)
पुष्टि के लिए मैं तर्क startDrag के लिए पारित के थे गैर-शून्य में सक्षम था। यहाँ उस कोड स्निपेट है:
ClipData data = ClipData.newPlainText("", "");
DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(mView);
boolean doingDrag = mView.startDrag(data, shadowBuilder, mView, 0);
startDrag झूठी वापस आती है और logcat खींचें संदेश और अपवाद का पता लगाने शुरू करने में असमर्थ होता है।
यह केवल ग्रिडव्यू में पहली छवि दृश्य पर होता है। अन्य सभी ठीक काम करते हैं।
मैंने एंड्रॉइड व्यू स्रोत के चारों ओर एक सुराग ढूंढने के लिए प्रेरित किया - मेरे डिवाइस के लिए बिल्ड/टैग ढूंढना परीक्षण और त्रुटि थी, लेकिन मुझे पता चला कि लाइन 16281 लाइन में शुरू हुई थी, ड्रैग टैग जेबी-एमआर 1 रिलीज के साथ था (मेरा नेक्सस 10 4.2.1 है इसलिए यह सही हो सकता है)। 16281 पर कोड है:
Point shadowSize = new Point();
Point shadowTouchPoint = new Point();
shadowBuilder.onProvideShadowMetrics(shadowSize, shadowTouchPoint);
if ((shadowSize.x < 0) || (shadowSize.y < 0) ||
(shadowTouchPoint.x < 0) || (shadowTouchPoint.y < 0)) {
throw new IllegalStateException("Drag shadow dimensions must not be negative");
}
if (ViewDebug.DEBUG_DRAG) {
Log.d(VIEW_LOG_TAG, "drag shadow: width=" + shadowSize.x + " height=" + shadowSize.y
+ " shadowX=" + shadowTouchPoint.x + " shadowY=" + shadowTouchPoint.y);
}
Surface surface = new Surface();
try {
IBinder token = mAttachInfo.mSession.prepareDrag(mAttachInfo.mWindow,
flags, shadowSize.x, shadowSize.y, surface);
if (ViewDebug.DEBUG_DRAG) Log.d(VIEW_LOG_TAG, "prepareDrag returned token=" + token
+ " surface=" + surface);
लाइन 16281 कोशिश में पहली कथन है: IBinder टोकन = mAttachInfo.mSession ...
अगर मेरे sleuthing सही है (मैं सही जेबी/देखें है। जावा स्रोत), ऐसा लगता है कि यह मुद्दा mAttachInfo या उसके खेतों में से एक के साथ शून्य है। shadowSize पहले vetted था और सतह अभी बनाया गया था। क्या कोई कारण है कि पहले दृश्य में "mAttachInfo" मान नहीं होगा (मान लीजिए इसका मतलब है कि यह एक विंडो से जुड़ा नहीं है)? या यह संभव है कि यह कोशिश ब्लॉक के भीतर कुछ अन्य पंक्ति है (अपवाद पकड़ा जा रहा है)।
त्रुटि RemoteLauncher.java:650 पर हो सकता है। उस रेखा पर क्या विशिष्ट है? – Nizam
यह उपरोक्त कोड में शुरू करने के लिए कॉल होगा: DragShadowBuilder shadowBuilder = नया दृश्य।DragShadowBuilder (mView); – BJV
फिर 'mView' शून्य है। – Nizam