android - 使用 Spinner 时会抛出神秘的 NullPointerException

标签 android

我有一个可点击的 TextView 和一个可见性设置为 GONE 的 Spinner。

这是我的布局 fragment :

<TextView
    android:id="@+id/strip1"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:text="  Order Name       ID      Description     Type" 
    android:textSize="15dip"
    android:textStyle="bold"
    android:clickable="true"
    android:gravity="left"
    android:textColor="#ffffff"
    android:layout_weight="1" />

<Spinner android:id="@+id/sortSpinner"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:drawSelectorOnTop="true"
    android:visibility="gone"
    android:clickable="true"
    android:prompt="@string/prompt" />

onCreate 我有这个:

TextView strip = (TextView)findViewById(R.id.strip1);
strip.setOnClickListener(new OnClickListener() {

    public void onClick(View arg0) {
        spinner_show();
    }

});

spinner_show() 看起来像这样:

private void spinner_show() {

    String str = new String[2];
    str[0] = "Ascending";
    str[1] = "Descending";

    Spinner sortSpin = (Spinner)findViewById(R.id.sortSpinner);
    ArrayAdapter<String> sizeArrayAdapter =
        new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_item, str);
    sizeArrayAdapter.setDropDownViewResource(
        android.R.layout.simple_spinner_dropdown_item);
    sortSpin.setAdapter(sizeArrayAdapter);
    sortSpin.setOnItemSelectedListener(
        new AdapterView.OnItemSelectedListener() {
            public void onItemSelected(AdapterView<?> parent,
                    View v, int pos, long id) {

        }

        public void onNothingSelected(AdapterView<?> parent) {

        } 
    });

应用程序抛出一个 NullPointerException,我不知道为什么。

这是 logcat fragment :

12-14 14:57:31.388: W/dalvikvm(3794): threadid=1: thread exiting with uncaught    exception (group=0x40015560)
12-14 14:57:31.468: E/AndroidRuntime(3794): FATAL EXCEPTION: main
12-14 14:57:31.468: E/AndroidRuntime(3794): java.lang.NullPointerException
12-14 14:57:31.468: E/AndroidRuntime(3794):     at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:355)
12-14 14:57:31.468: E/AndroidRuntime(3794):     at android.widget.ArrayAdapter.getDropDownView(ArrayAdapter.java:376)
12-14 14:57:31.468: E/AndroidRuntime(3794):     at android.widget.Spinner$DropDownAdapter.getDropDownView(Spinner.java:332)
12-14 14:57:31.468: E/AndroidRuntime(3794):     at android.widget.Spinner$DropDownAdapter.getView(Spinner.java:328)
12-14 14:57:31.468: E/AndroidRuntime(3794):     at android.widget.AbsListView.obtainView(AbsListView.java:1409)
12-14 14:57:31.468: E/AndroidRuntime(3794):     at android.widget.ListView.measureHeightOfChildren(ListView.java:1216)
12-14 14:57:31.468: E/AndroidRuntime(3794):     at android.widget.ListView.onMeasure(ListView.java:1127)
12-14 14:57:31.468: E/AndroidRuntime(3794):     at android.view.View.measure(View.java:8313)
12-14 14:57:31.468: E/AndroidRuntime(3794):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
12-14 14:57:31.468: E/AndroidRuntime(3794):     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1017)
12-14 14:57:31.468: E/AndroidRuntime(3794):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:386)
12-14 14:57:31.468: E/AndroidRuntime(3794):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:309)
12-14 14:57:31.468: E/AndroidRuntime(3794):     at android.view.View.measure(View.java:8313)
12-14 14:57:31.468: E/AndroidRuntime(3794):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
12-14 14:57:31.468: E/AndroidRuntime(3794):     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1017)
12-14 14:57:31.468: E/AndroidRuntime(3794):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:386)
12-14 14:57:31.468: E/AndroidRuntime(3794):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:309)
12-14 14:57:31.468: E/AndroidRuntime(3794):     at com.android.internal.widget.WeightedLinearLayout.onMeasure(WeightedLinearLayout.java:60)
12-14 14:57:31.468: E/AndroidRuntime(3794):     at android.view.View.measure(View.java:8313)
12-14 14:57:31.468: E/AndroidRuntime(3794):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
12-14 14:57:31.468: E/AndroidRuntime(3794):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
12-14 14:57:31.468: E/AndroidRuntime(3794):     at android.view.View.measure(View.java:8313)
12-14 14:57:31.468: E/AndroidRuntime(3794):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
12-14 14:57:31.468: E/AndroidRuntime(3794):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
12-14 14:57:31.468: E/AndroidRuntime(3794):     at android.view.View.measure(View.java:8313)
12-14 14:57:31.468: E/AndroidRuntime(3794):     at android.view.ViewRoot.performTraversals(ViewRoot.java:839)
12-14 14:57:31.468: E/AndroidRuntime(3794):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1859)
12-14 14:57:31.468: E/AndroidRuntime(3794):     at android.os.Handler.dispatchMessage(Handler.java:99)
12-14 14:57:31.468: E/AndroidRuntime(3794):     at android.os.Looper.loop(Looper.java:123)
12-14 14:57:31.468: E/AndroidRuntime(3794):     at android.app.ActivityThread.main(ActivityThread.java:3683)
12-14 14:57:31.468: E/AndroidRuntime(3794):     at java.lang.reflect.Method.invokeNative(Native Method)
12-14 14:57:31.468: E/AndroidRuntime(3794):     at java.lang.reflect.Method.invoke(Method.java:507)
12-14 14:57:31.468: E/AndroidRuntime(3794):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
12-14 14:57:31.468: E/AndroidRuntime(3794):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
12-14 14:57:31.468: E/AndroidRuntime(3794):     at dalvik.system.NativeStart.main(Native Method)

我错过了什么?

最佳答案

好的,首先是你的xml布局文件,

          <TextView
    android:id="@+id/strip1"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:text="  Order Name       ID      Description     Type" 
    android:textSize="15dip"
    android:textStyle="bold"
    android:clickable="true"
    android:gravity="left"
    android:textColor="#ffffff"/>

<Spinner android:id="@+id/sortSpinner"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content" 
         android:drawSelectorOnTop="true"
         android:visibility="gone"
         android:clickable="true"
         android:prompt="@string/prompt"/>

在你的 xml 文件中,你的 TextView 有 android:layout_weight="1" 所以它覆盖了所有布局,没有 Spinner 的空间(这也不会导致 NullPointerException 所以它没有必要),

现在从你的 java 类文件,

 private void spinner_show()  
    {

        String[] str=new String[2]; // problem on declaring String array
        str[0]="Ascending";
        str[1]="Descending";

        Spinner sortSpin = (Spinner)findViewById(R.id.sortSpinner);
        ArrayAdapter<String> sizeArrayAdapter = new ArrayAdapter<String>    (this,android.R.layout.simple_spinner_item,str);
        sizeArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        sortSpin.setAdapter(sizeArrayAdapter);
        sortSpin.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            public void onItemSelected(AdapterView<?> parent, View v, int pos, long id) {

            }
            public void onNothingSelected(AdapterView<?> parent) {
            } 
        });

        sortSpin.setVisibility(View.VISIBLE); // also you don't Visiable your spinner
   }

主要是它在我的 eclipse 中运行良好,我刚刚从 xml 文件中删除了 android:prompt="@string/prompt" 属性,因为我不知道没有字符串提示..

关于android - 使用 Spinner 时会抛出神秘的 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8501861/

相关文章:

java - 通过 JSch shell 的多个命令

java - 三星盖乐世 S8+ : Device Metrics Gives wrong device screen pixel density

android - ANeuralNetworksMemory_createFromFd 是如何工作的?

java - AbsoluteLayout中的ImageView,如何设置ImageView的x,y坐标?

android - Fragment 类中未调用 FirebaseAuth.AuthStateListener

java - 通过 CustomTab 或 Chrome 发布数据

android - 如何获取未读gmail邮件的数量(在android上)

java - ConnectionTimeout 与 SocketTimeout

android - Android中的sendStickyBroadcast和sendBroadcast有什么区别

java - Appcelerator Titan 为我的 Android 项目构建 java 文件时崩溃