JonSkeet 2013-09-10 09:45 采纳率: 0%
浏览 1147

如何根据第一个spinner来加载内容?

当在 com.example.bertin.HotelLocation.onItemSelected 上开启 FATAL EXCEPTION: main java.lang.NullPointer Exception 时,获得一个 Log Cat error。
是否是 onItemSelected 的错误呢。代码如下:

package com.example.bertin;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;

public class HotelLocation extends Activity implements OnItemSelectedListener {

    Spinner countrySpinner, citySpinner;
    private ArrayAdapter<String> countryAdapter;
    private ArrayAdapter<String> cityAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_hotel_location);

        Spinner countrySpinner = (Spinner) findViewById(R.id.spinnerHotelCountry);
        Spinner citySpinner = (Spinner) findViewById(R.id.spinnerHotelCity);

        // Create an ArrayAdapter using the string array and a default spinner
        // layout
        ArrayAdapter<CharSequence> countryAdapter = ArrayAdapter
                .createFromResource(this, R.array.countries,
                        android.R.layout.simple_spinner_item);
        ArrayAdapter<CharSequence> cityAdapter = ArrayAdapter
                .createFromResource(this, R.array.australia,
                        android.R.layout.simple_spinner_item);

        // Specify the layout to use when the list of choices appears
        countryAdapter         .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        cityAdapter
.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        // Apply the adapter to the spinner
        countrySpinner.setAdapter(countryAdapter);
        citySpinner.setAdapter(cityAdapter);

        countrySpinner.setOnItemSelectedListener(this);
        // citySpinner.setOnItemSelectedListener(this);
    }
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position,
            long id) {
        String[] citySpinnerArray = null;
        String selected = parent.getItemAtPosition(position).toString();
        if (selected.equals("Australia")) {
            citySpinnerArray = getResources().getStringArray(R.array.australia);
        }
        citySpinner.setAdapter(new ArrayAdapter(this,
                android.R.layout.simple_spinner_item, citySpinnerArray));
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.hotel_location, menu);
        return true;
    }
    @Override
    public void onNothingSelected(AdapterView<?> arg0) {
        // TODO Auto-generated method stub
    }
}

StackTrace:

09-10 03:42:02.484: E/AndroidRuntime(2160): FATAL EXCEPTION: main

09-10 03:42:02.484: E/AndroidRuntime(2160): java.lang.NullPointerException

09-10 03:42:02.484: E/AndroidRuntime(2160):     at com.example.bertin.HotelLocation.onItemSelected(HotelLocation.java:97)

09-10 03:42:02.484: E/AndroidRuntime(2160):     at android.widget.AdapterView.fireOnSelected(AdapterView.java:892)

09-10 03:42:02.484: E/AndroidRuntime(2160):     at android.widget.AdapterView.access$200(AdapterView.java:49)

09-10 03:42:02.484: E/AndroidRuntime(2160):     at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:860)

09-10 03:42:02.484: E/AndroidRuntime(2160):     at android.os.Handler.handleCallback(Handler.java:730)

09-10 03:42:02.484: E/AndroidRuntime(2160):     at android.os.Handler.dispatchMessage(Handler.java:92)

09-10 03:42:02.484: E/AndroidRuntime(2160):     at android.os.Looper.loop(Looper.java:137)

09-10 03:42:02.484: E/AndroidRuntime(2160):     at android.app.ActivityThread.main(ActivityThread.java:5103)

09-10 03:42:02.484: E/AndroidRuntime(2160):     at java.lang.reflect.Method.invokeNative(Native Method)

09-10 03:42:02.484: E/AndroidRuntime(2160):     at java.lang.reflect.Method.invoke(Method.java:525)

09-10 03:42:02.484: E/AndroidRuntime(2160):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)

09-10 03:42:02.484: E/AndroidRuntime(2160):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)

09-10 03:42:02.484: E/AndroidRuntime(2160):     at dalvik.system.NativeStart.main(Native Method)
  • 写回答

1条回答

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-01-31 07:27
    关注

    这个错误是因为 citySpinner 变量在 onItemSelected 函数中被使用时为空引用。可能是因为在 onCreate 函数中重复定义了该变量(与类级别的定义不同),导致该变量不能正确访问。为解决该问题,请在 onCreate 函数中更改如下代码:

    Spinner countrySpinner = (Spinner) findViewById(R.id.spinnerHotelCountry);
    Spinner citySpinner = (Spinner) findViewById(R.id.spinnerHotelCity);
    

    为:

    countrySpinner = (Spinner) findViewById(R.id.spinnerHotelCountry);
    citySpinner = (Spinner) findViewById(R.id.spinnerHotelCity);
    
    评论

报告相同问题?

悬赏问题

  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?