Tôi có một số mã biên dịch thành công bằng cách sử dụng ViewTreeObserver#removeOnGlobalLayoutListener(...)
và khi chạy, phương thức này sẽ ném NoSuchMethodError
. Tại sao?Tại sao removeOnGlobalLayoutListener ném một NoSuchMethodError?
Trả lời
Có hai phương pháp trong ViewTreeObserver
có cùng tên.
removeOnGlobalLayoutListener(ViewTreeObserver.OnGlobalLayoutListener victim)
(trên sau đó toàn cầu) là một phương pháp mà đã được bổ sung trong API 16. Nó thay thế
removeGlobalOnLayoutListener(ViewTreeObserver.OnGlobalLayoutListener victim)
(toàn cầu sau đó trên) trong đó có tồn tại kể từ API 1, nhưng hiện không còn được dùng nữa.
Cả hai phương pháp đều có thể xuất hiện tại thời điểm biên dịch (nếu bạn đang xây dựng dựa trên Jellybean hoặc cao hơn) nhưng phương pháp mới hơn sẽ bị lỗi trên các thiết bị trước Jellybean.
Mã này cản trở các lỗi:
try {
thing.removeOnGlobalLayoutListener(victim);
} catch (NoSuchMethodError x) {
thing.removeGlobalOnLayoutListener(victim);
}
Vì vậy, hiện mã này:
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
thing.removeGlobalOnLayoutListener(victim);
} else {
thing.removeOnGlobalLayoutListener(victim);
}
Cảm ơn bạn để chia sẻ vấn đề và giải pháp của bạn. Tôi đã thử mã của bạn và vẫn gặp sự cố. Bạn có nhìn vào câu hỏi của tôi tại http://stackoverflow.com/questions/18285540/stop-listening-for-more-listener-events không? – Geek
Ồ, giống như Google đang cố gắng troll các nhà phát triển. Cảm ơn vì giải pháp này! –
Ha, tôi biết ý bạn là gì! Tôi nghĩ đó là sự nhất quán với 'ViewTreeObserver # addOnGlobalLayoutListener (ViewTreeObserver.OnGlobalLayoutListener) 'và ai đó đã phạm sai lầm trong Android 1.5, và không ai làm phiền để sửa nó cho đến Android 4 .... –
Tôi giả sử bạn đang nói về removeOnGlobalLayoutListener từ lớp ViewTreeObserver. Phương pháp này đã được thêm vào ở cấp API 16. Suy đoán tốt nhất của tôi là bạn cố gắng sử dụng phương pháp này trên một thiết bị chạy phiên bản Android cũ, đó là lý do tại sao nó không thể được tìm thấy.
Tôi biết, tôi vừa phát hiện ra điều đó và nghĩ rằng sẽ đáng nói với mọi người về 'removeGlobalOnLayoutListener (...)' (không được chấp nhận, API 1) :) –
Tôi có mã
public static void removeOnGlobalLayoutListener(View v, ViewTreeObserver.OnGlobalLayoutListener listener){
if (Build.VERSION.SDK_INT < 16) {
v.getViewTreeObserver().removeGlobalOnLayoutListener(listener);
} else {
v.getViewTreeObserver().removeOnGlobalLayoutListener(listener);
}
}
- 1. Tạo một String mới từ một Charset ném NoSuchMethodError (Android)
- 2. Button.setBackground (Nền có thể vẽ) ném NoSuchMethodError
- 3. Tại sao BitmapSource.Create lại ném một ArgumentException?
- 4. Tại sao XmlSerializer ném một InvalidOperationException?
- 5. Tại sao MemoryStream.GetBuffer() luôn ném?
- 6. ImageSourceConverter ném NullReferenceException ... tại sao?
- 7. Tại sao Observable.Generate() ném System.StackOverflowException?
- 8. Tại sao System.Web.Hosting.ApplicationHost.CreateApplicationHost ném System.IO.FileNotFoundException?
- 9. java.util.Prefs ném BackingStoreException - Tại sao?
- 10. Tại sao NHibernate ném "StaleObjectStateException"?
- 11. Tại sao StreamReader.ReadLine ném OutOfMemoryException?
- 12. Tại sao Iterator.next() ném ConcurrentModificationException
- 13. Tại sao '{' ném một NullReferenceException trong một phương thức tĩnh?
- 14. Tại sao "ném" và "ném cũ" trong một khối catch hoạt động theo cùng một cách?
- 15. NoSuchMethodError: org.slf4j.helpers.MessageFormatter.format
- 16. NoSuchMethodError: org.slf4j.impl.StaticLoggerBinder.getSingleton()
- 17. Tại sao ứng dụng của tôi ném một `android.permission.REBOOT SecurityException`?
- 18. Tại sao canvas.toDataURL() ném một ngoại lệ bảo mật?
- 19. Tại sao std :: locale loc ("en_") ném một ngoại lệ?
- 20. Tại sao Byte.parseByte ("10000001", 2) ném một NFE?
- 21. Tại sao `Pattern.compile (" (?: \ U00e9) ", Pattern.CANON_EQ)` ném?
- 22. Tại sao PyGILState_Release ném lỗi Python Fatal
- 23. Tại sao List.remove (int) lại ném java.lang.UnsupportedOperationException?
- 24. Tại sao dh_usrlocal ném lỗi xây dựng?
- 25. Tại sao CLR lại ném ThreadAbortException?
- 26. Spring MVC - Tại sao ngoại lệ NoSuchMethodError khi triển khai ngữ cảnh?
- 27. Spring + Hibernate: LocalSessionFactoryBean - NoSuchMethodError: org.hibernate.cfg.annotations.reflection.XMLContext
- 28. Hibernate 3.5.x: NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval
- 29. tại sao PHP không ném lỗi phân tích cú pháp?
- 30. Tại sao Property Set ném ngoại lệ StackOverflow?
làm việc ở đâu là mã? – Rawkode
Tôi biết giải pháp, tôi chỉ đăng bài theo định dạng câu hỏi và trả lời phổ biến và sôi nổi :) –
Tôi giả sử bạn chỉ đang cố gắng để có được một vài cuộc bầu cử, nhưng bạn có thể tự đổi lấy ít nhất là cho @azertiti quyền Trả lời :) – Rigotti