2010-08-23 35 views
9

Tôi đang thiết lập một ArrayAdapter và tôi nhận được lỗi sau:android - ArrayAdapter.createViewFromResource (int, View, ViewGroup, int) dòng: 355 NullPointerException

Thread [<1> main] (Suspended (exception NullPointerException)) 
ArrayAdapter.createViewFromResource(int, View, ViewGroup, int) line: 355  
ArrayAdapter.getView(int, View, ViewGroup) line: 323  
ListView(AbsListView).obtainView(int, boolean[]) line: 1294 
ListView.measureHeightOfChildren(int, int, int, int, int) line: 1198  

symptomremedyActivity.java tôi trông như thế:

setContentView(R.layout.symptomremedy); 
    ListView remedyList = (ListView) findViewById(R.id.ListView_SymptomRemedy); 
    remedyList.setTextFilterEnabled(true); 
    ArrayAdapter<String> adapt = new ArrayAdapter<String>(this, R.layout.menu_item, remedyArray); 
    remedyList.setAdapter(adapt); 

và bố trí symptomremedy.xml của tôi trông giống như:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
> 
<Button 
android:id="@+id/Button_BACK" 
android:layout_width="wrap_content" 
android:layout_height="@dimen/menu_button_height" 
android:layout_alignTop="@+id/Button_BACK" 
android:layout_below="@+id/ImageView_MenuHeader" 
android:textSize="@dimen/menu_button_text_size" 
android:text="@string/back"></Button> 

<ListView 
     android:layout_height="wrap_content" 
     android:id="@+id/ListView_SymptomRemedy" 
     android:layout_width="fill_parent" 
     android:background="@color/menu_white" 
     android:divider="@drawable/straight_divider" 
     android:listSelector="@drawable/textured" 
     android:layout_alignParentTop="true"></ListView> 

</LinearLayout> 

và bố trí menu_item.xml trông giống như:

<TextView 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:textSize="@dimen/menu_item_size" 
android:text="test string" 
android:textColor="@color/menu_black" 
android:layout_height="fill_parent" 
/> 

Tôi đã làm điều gì đó tương tự trong các Hoạt động khác không có vấn đề, vì vậy tôi không thể tìm ra lý do tại sao có sự cố ở đây. Tất cả các lĩnh vực liên quan là không null, tức là remedyArray, vv Bất cứ ai có bất kỳ ý tưởng vấn đề là gì?

Trả lời

9

Hóa ra vấn đề là cách tôi tạo mảng cho ArrayAdapter. Trước đây mã tôi đã có được:

String remedyArray[] = new String[30]; 

Khi tôi đã thay đổi mã để:

String remedyArray[] = new String[30]; 
    for (int i = 0; i< 30; i++){ 
      remedyArray[i] = ""; 
    } 

tất cả mọi thứ làm việc. Tôi không hoàn toàn hiểu tại sao, nhưng nó xuất hiện mà khởi tạo mảng với các giá trị đã làm các trick. Tôi đoán một trong những tính duy nhất của Java là khi một mảng được tạo, các mục có chứa null, và tôi nghĩ rằng đó là những giá trị null đã gây ra vấn đề.

+1

Tôi cũng gặp sự cố này. Cảm ơn bạn đã giải quyết nó ở đây! – Erika

+1

Tôi đã gặp phải vấn đề tương tự. Tôi đã tìm kiếm rất nhiều cho điều này, và tìm thấy điều này sau khi toooooo nhiều thử nghiệm trên mã ..... Rất biết ơn điều này. –

8

Các NullPointerException trong

ArrayAdapter.createViewFromResource 

gợi ý rằng vấn đề xuất phát từ

R.layout.menu_item 

Nếu tập tin này tồn tại dưới/res/layout /, kiểm tra xem nó đã đăng ký trong R.java

Ngoài ra, bạn có đang sử dụng ArrayAdapter tùy chỉnh không? Nếu có, vui lòng cập nhật câu hỏi bằng mã.

Nếu bạn không sử dụng ArrayAdapter tùy chỉnh, hãy thử thêm số nhận dạng vào TextView trong menu_item. Nếu bạn không ghi đè getView, Android sẽ cố gắng điền vào một TextView trong resourceId (menu_item.xml) với dữ liệu trong remedyList. Tôi chưa bao giờ làm điều này, nhưng bạn có thể cần xác định id TextView bằng cách sử dụng hàm tạo này:

ArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects) 

Kiểm tra ArrayAdapter constructors.

0

Vấn đề của tôi là bố cục mục tùy chỉnh và bố cục mục thả xuống không sử dụng cùng một Id cho chế độ xem văn bản chính; về cơ bản vì tôi muốn tạo một mục tùy chỉnh, nhưng duy trì mục thả xuống mặc định.

id trong textViewResourceId phải giống nhau cho cả hai chế độ xem.

ArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects) 

Tạo mục thả xuống tùy chỉnh có cùng id xem văn bản đã giải quyết được sự cố.

0

Xin lỗi vì đã tìm hiểu câu hỏi này nhưng tôi đã xem xét vấn đề hôm nay và tôi hiểu tại sao điều này xảy ra.

Nếu bạn phân bổ tĩnh một số không gian cho một mảng mới được tạo (ví dụ: String[] array = new String[80]), bạn phải đảm bảo rằng bạn điền tất cả 81 vị trí của mảng. Bởi vì nếu bạn không, họ sẽ được điền với các giá trị null do đó gây ra NullPointerException.

Khi bạn lấp đầy mảng bằng các chuỗi trống, về cơ bản bạn đã tìm thấy một công việc xung quanh vấn đề này.

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