2012-11-05 46 views
10

Tôi gặp sự cố khi điền trình quay tròn của mình với các ngày trong tuần.android: điền vào một spinner từ strings.xml

layout xml:

<Spinner 
    android:id="@+id/week_spinner" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:drawSelectorOnTop="true"/> 

strings.xml

<resources> 
    <string-array name="days_of_week"> 
    <item>Monday</item> 
    <item>Tuesday</item> 
    <item>Wednesday</item> 
    <item>Thursday</item> 
    <item>Friday</item> 
    </string-array> 
</resources> 

java:

public class AddModule extends Activity { 
    Spinner day; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     day = (Spinner)findViewById(R.id.week_spinner); 

     ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.days_of_week, android.R.layout.simple_spinner_item); 
     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     day.setAdapter(adapter); 
     setContentView(R.layout.activity_add_module); 
    } 
} 

Đó là dòng setAdapter đó là gây ra ứng dụng để sụp đổ. Tôi nhận được các lỗi sau đây

11-05 21:24:31.235: W/dalvikvm(867): threadid=1: thread exiting with uncaught exception (group=0x40a9a228) 
11-05 21:24:31.245: E/AndroidRuntime(867): FATAL EXCEPTION: main 
11-05 21:24:31.245: E/AndroidRuntime(867): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.cathal.timetable/com.cathal.timetable.AddModule}: java.lang.NullPointerException 
11-05 21:24:31.245: E/AndroidRuntime(867): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2202) 
11-05 21:24:31.245: E/AndroidRuntime(867): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2237) 
11-05 21:24:31.245: E/AndroidRuntime(867): at android.app.ActivityThread.access$600(ActivityThread.java:139) 
11-05 21:24:31.245: E/AndroidRuntime(867): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1262) 
11-05 21:24:31.245: E/AndroidRuntime(867): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-05 21:24:31.245: E/AndroidRuntime(867): at android.os.Looper.loop(Looper.java:154) 
11-05 21:24:31.245: E/AndroidRuntime(867): at android.app.ActivityThread.main(ActivityThread.java:4974) 
11-05 21:24:31.245: E/AndroidRuntime(867): at java.lang.reflect.Method.invokeNative(Native Method) 
11-05 21:24:31.245: E/AndroidRuntime(867): at java.lang.reflect.Method.invoke(Method.java:511) 
11-05 21:24:31.245: E/AndroidRuntime(867): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
11-05 21:24:31.245: E/AndroidRuntime(867): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
11-05 21:24:31.245: E/AndroidRuntime(867): at dalvik.system.NativeStart.main(Native Method) 11-05 21:24:31.245: E/AndroidRuntime(867): Caused by: java.lang.NullPointerException 11-05 21:24:31.245: E/AndroidRuntime(867): at com.cathal.timetable.AddModule.onCreate(AddModule.java:18) 
11-05 21:24:31.245: E/AndroidRuntime(867): at android.app.Activity.performCreate(Activity.java:4538) 
11-05 21:24:31.245: E/AndroidRuntime(867): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1071) 
11-05 21:24:31.245: E/AndroidRuntime(867): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2158) 
11-05 21:24:31.245: E/AndroidRuntime(867): ... 11 more 

Điều này đã hoạt động tốt hôm qua. Tôi không thể tìm ra nếu tôi có thể thay đổi một cái gì đó hoặc nếu tôi có một vấn đề nhật thực.

Trả lời

8
super.onCreate(savedInstanceState); 
setContentView(yourView); 
day = (Spinner)findViewById(R.id.week_spinner); 

Bạn quên đặt chế độ xem trước khi lấy spinner từ xml. Nếu bạn không đặt chế độ xem, findViewById sẽ trả lại null.

Mọi hoạt động trên null kết quả tham chiếu trong NullPointerException.

+0

Một lời khen ngợi từ tôi vì quyền này, tôi chỉ đơn giản là hiển thị một cách tiếp cận thay thế. – Sam

33

Nambari giải thích lý do bạn nhận được NullPointerException và cách sử dụng đúng cách findViewById().

tôi muốn chỉ ra một cách dễ dàng hơn để thiết lập một Spinner có sử dụng các thiết lập mặc định, bạn chỉ cần thêm video này vào XML của bạn:

android:entries="@array/days_of_week" 

Và bạn có thể loại bỏ tất cả các tham chiếu tới bộ chuyển đổi của bạn trong onCreate().

+0

cảm ơn, cả hai bạn! – user1797190

+0

tốt hơn rất nhiều ... – AFD

+0

lật IDK tại sao tôi không nghĩ về điều này. briliiant !! – Manny265

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