2015-03-13 16 views
8

Tôi có một số mã trông giống nhưNullPointerException từ UsbManager

UsbManager usbManager = (UsbManager) context.getSystemService(Context.USB_SERVICE); 
usbManager.getDeviceList(); 

Khi tôi sử dụng một 5,0 giả lập Android, tôi nhận được tai nạn này:

java.lang.NullPointerException: Attempt to invoke interface method 'void android.hardware.usb.IUsbManager.getDeviceList(android.os.Bundle)' on a null object reference 
    at android.hardware.usb.UsbManager.getDeviceList(UsbManager.java:243) 
    ... 

Tôi hiểu rằng giả lập Android chính thức không có USB hỗ trợ, nhưng tôi hy vọng sẽ thấy một danh sách các thiết bị USB trống hơn là một sự cố.

Tôi đã đạt đến đỉnh điểm trong mã Android một chút và bản đồ dịch vụ của ServiceManager không có mục nhập cho "usb". Không có gì trong ngăn xếp Android 21 dường như xử lý giá trị null được trả về bởi ServiceManager.

Mã hoạt động tốt trên thiết bị 4.4 mô phỏng nhưng bị treo trên 5.0 thiết bị. Kiến trúc CPU dường như không tạo nên sự khác biệt; Tôi đã thử ARM và x86.

Nó cũng hoạt động tốt trên tất cả các thiết bị Genymotion tôi đã thử, nhưng tôi cần phải làm việc này trên máy chủ CentOS CI, và nhận Genymotion để chạy trên CentOS dường như yêu cầu thay đổi xâm nhập.

Bất kỳ ý tưởng nào để khắc phục hoặc giải quyết sự cố? Như một phương sách cuối cùng tôi có thể bắt N232 UsbManager 's, nhưng nó sẽ là khá xấu như tôi cũng sử dụng một thư viện bên thứ ba tương tác với UsbManager.

+1

này: https://bugs.chromium.org/p/chromium/issues/detail?id=578875 gợi ý rằng - getDevicesList không hoạt động trên các trình giả lập do các trình mô phỏng thiếu hỗ trợ usb. – Tom

Trả lời

0

https://developer.android.com/reference/android/content/Context.html#getSystemService(java.lang.String)

RETURN Object The service or null if the name does not exist.

Theo API, thực hiện không bắt buộc phải trả lại một giá trị không null.

Làm việc xung quanh: đơn giản.

UsbManager usbManager = (UsbManager) context.getSystemService(Context.USB_SERVICE); 
if (usbManager == null) { 
    Log.w("MyApp","USB Not supported"); 
    return; 
} 

// Normal route 
usbManager.getDeviceList(); 

(Tôi cũng đã phải đối mặt với cùng một vấn đề trên Emulator như bạn mô tả)

+0

OP hỏi về một ngoại lệ trong getDeviceList - không phải là một null trả về bởi getSystemService. – Tom

Các vấn đề liên quan