Android 尝试根据第一个微调器设置第二个微调器失败

Android 尝试根据第一个微调器设置第二个微调器失败,android,spinner,Android,Spinner,我正在尝试创建一个应用程序,根据驱动器类型、RAID类型和驱动器数量计算不同的总容量 我一直在看这里和其他网站上的不同例子,试图让这个工作没有用。无论我尝试做什么,在运行应用程序时都会得到一个“java.lang.NullPointerException”。下面是我到目前为止的代码(我只是想测试微调器是否会根据第一个微调器的选择动态设置,然后再继续): 活动容量计算.xml <LinearLayout xmlns:android="http://schemas.android.com/ap

我正在尝试创建一个应用程序,根据驱动器类型、RAID类型和驱动器数量计算不同的总容量

我一直在看这里和其他网站上的不同例子,试图让这个工作没有用。无论我尝试做什么,在运行应用程序时都会得到一个“java.lang.NullPointerException”。下面是我到目前为止的代码(我只是想测试微调器是否会根据第一个微调器的选择动态设置,然后再继续):

活动容量计算.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context=".CapacityCalculation" >

<Spinner
    android:id="@+id/spinnerDrive"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:prompt="@string/drive_selection" />

<Spinner
    android:id="@+id/spinnerCapacity"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:prompt="@string/capacity_selection" />

<Spinner
    android:id="@+id/spinnerRAID"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:prompt="@string/RAID_selection" />

<Spinner
    android:id="@+id/spinnerNumber"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:prompt="@string/number_of_drives" />

<Button
    android:id="@+id/capacity_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/capacity_button" />

</LinearLayout>

CapcityCalcultaion.java

package com.jrod.storagecalculator;

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

public class CapacityCalculation extends Activity {

    private Spinner spinnerDrive, spinnerCapacity;

    ArrayAdapter<CharSequence> stringArrayAdapter = ArrayAdapter.createFromResource(CapacityCalculation.this, R.array.drive_array, android.R.layout.simple_spinner_dropdown_item);
    ArrayAdapter<CharSequence> nlsasAdapter = ArrayAdapter.createFromResource(CapacityCalculation.this, R.array.nlsas_capacity, android.R.layout.simple_spinner_dropdown_item);
    ArrayAdapter<CharSequence> sasAdapter = ArrayAdapter.createFromResource(CapacityCalculation.this, R.array.sas_capacity, android.R.layout.simple_spinner_dropdown_item);
    ArrayAdapter<CharSequence> ssdAdapter = ArrayAdapter.createFromResource(CapacityCalculation.this, R.array.ssd_capacity, android.R.layout.simple_spinner_dropdown_item);

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


            spinnerDrive = (Spinner) findViewById(R.id.spinnerDrive);
            spinnerDrive.setAdapter(stringArrayAdapter);
            spinnerDrive.setOnItemSelectedListener(new OnItemSelectedListener() {

            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

                String check = (String) parent.getItemAtPosition(position);

                    if (check.startsWith("NL-SAS")) {
                    spinnerCapacity.setAdapter(nlsasAdapter);
                    }else if (check.startsWith("SAS")) {
                    spinnerCapacity.setAdapter(sasAdapter);
                    }else if (check.startsWith("SSD")) {
                    spinnerCapacity.setAdapter(ssdAdapter);
                    }
                }


                public void onNothingSelected(AdapterView<?> parent){

                }
            });

    private void setupActionBar() {
        getActionBar().setDisplayHomeAsUpEnabled(true);
    }
}
package com.jrod.storagecalculator;
导入android.app.Activity;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.AdapterView.OnItemSelectedListener;
导入android.widget.ArrayAdapter;
导入android.widget.Spinner;
公共类容量计算扩展了活动{
私人纺纱机,纺纱机容量;
ArrayAdapter stringArrayAdapter=ArrayAdapter.createFromResource(CapacityCalculation.this,R.array.drive\u array,android.R.layout.simple\u微调器\u下拉菜单项);
ArrayAdapter NLSASAAdapter=ArrayAdapter.createFromResource(CapacityCalculation.this,R.array.nlsas_capacity,android.R.layout.simple_微调器_下拉菜单项);
ArrayAdapter SASASAdapter=ArrayAdapter.createFromResource(CapacityCalculation.this,R.array.sas\u capacity,android.R.layout.simple\u spinner\u下拉菜单项);
ArrayAdapter ssdAdapter=ArrayAdapter.createFromResource(CapacityCalculation.this,R.array.ssd\u capacity,android.R.layout.simple\u微调器\u下拉菜单项);
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u capacity\u calculation);
setupActionBar();
spinnerDrive=(Spinner)findViewById(R.id.spinnerDrive);
喷丝头驱动装置。设置适配器(stringArrayAdapter);
spinnerDrive.setOnItemSelectedListener(新的OnItemSelectedListener()){
已选择公共视图(AdapterView父视图、视图视图、整型位置、长id){
字符串检查=(字符串)parent.getItemAtPosition(位置);
如果(使用“NL-SAS”检查启动){
喷丝头容量。setAdapter(NLSASAAdapter);
}否则,如果(使用(“SAS”)检查.startsWith){
喷丝头容量。setAdapter(SASAAdapter);
}否则,如果(使用“SSD”检查启动){
喷丝头容量。设置适配器(ssdAdapter);
}
}
未选择公共无效(AdapterView父级){
}
});
私有void setupActionBar(){
getActionBar().setDisplayHomeAsUpEnabled(true);
}
}
以及我的logcat输出:

03-10 15:07:23.155: E/AndroidRuntime(29319): FATAL EXCEPTION: main
03-10 15:07:23.155: E/AndroidRuntime(29319): Process: com.jrod.storagecalculator, PID: 29319
03-10 15:07:23.155: E/AndroidRuntime(29319): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.jrod.storagecalculator/com.jrod.storagecalculator.CapacityCalculation}: java.lang.NullPointerException
03-10 15:07:23.155: E/AndroidRuntime(29319):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2131)
03-10 15:07:23.155: E/AndroidRuntime(29319):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2265)
03-10 15:07:23.155: E/AndroidRuntime(29319):    at android.app.ActivityThread.access$800(ActivityThread.java:145)
03-10 15:07:23.155: E/AndroidRuntime(29319):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1206)
03-10 15:07:23.155: E/AndroidRuntime(29319):    at android.os.Handler.dispatchMessage(Handler.java:102)
03-10 15:07:23.155: E/AndroidRuntime(29319):    at android.os.Looper.loop(Looper.java:136)
03-10 15:07:23.155: E/AndroidRuntime(29319):    at android.app.ActivityThread.main(ActivityThread.java:5081)
03-10 15:07:23.155: E/AndroidRuntime(29319):    at java.lang.reflect.Method.invokeNative(Native Method)
03-10 15:07:23.155: E/AndroidRuntime(29319):    at java.lang.reflect.Method.invoke(Method.java:515)
03-10 15:07:23.155: E/AndroidRuntime(29319):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:783)
03-10 15:07:23.155: E/AndroidRuntime(29319):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
03-10 15:07:23.155: E/AndroidRuntime(29319):    at dalvik.system.NativeStart.main(Native Method)
03-10 15:07:23.155: E/AndroidRuntime(29319): Caused by: java.lang.NullPointerException
03-10 15:07:23.155: E/AndroidRuntime(29319):    at android.content.ContextWrapper.getResources(ContextWrapper.java:89)
03-10 15:07:23.155: E/AndroidRuntime(29319):    at android.view.ContextThemeWrapper.getResources(ContextThemeWrapper.java:78)
03-10 15:07:23.155: E/AndroidRuntime(29319):    at android.widget.ArrayAdapter.createFromResource(ArrayAdapter.java:430)
03-10 15:07:23.155: E/AndroidRuntime(29319):    at com.jrod.storagecalculator.CapacityCalculation.<init>(CapacityCalculation.java:15)
03-10 15:07:23.155: E/AndroidRuntime(29319):    at java.lang.Class.newInstanceImpl(Native Method)
03-10 15:07:23.155: E/AndroidRuntime(29319):    at java.lang.Class.newInstance(Class.java:1208)
03-10 15:07:23.155: E/AndroidRuntime(29319):    at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
03-10 15:07:23.155: E/AndroidRuntime(29319):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2122)
03-10 15:07:23.155: E/AndroidRuntime(29319):    ... 11 more
03-10 15:07:23.155:E/AndroidRuntime(29319):致命异常:main
03-10 15:07:23.155:E/AndroidRuntime(29319):进程:com.jrod.storagecalculator,PID:29319
03-10 15:07:23.155:E/AndroidRuntime(29319):java.lang.RuntimeException:无法实例化活动组件信息{com.jrod.storagecalculator/com.jrod.storagecalculator.CapacityCalculation}:java.lang.NullPointerException
03-10 15:07:23.155:E/AndroidRuntime(29319):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2131)
03-10 15:07:23.155:E/AndroidRuntime(29319):位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2265)
03-10 15:07:23.155:E/AndroidRuntime(29319):在android.app.ActivityThread.access$800(ActivityThread.java:145)
03-10 15:07:23.155:E/AndroidRuntime(29319):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1206)
03-10 15:07:23.155:E/AndroidRuntime(29319):在android.os.Handler.dispatchMessage(Handler.java:102)上
03-10 15:07:23.155:E/AndroidRuntime(29319):在android.os.Looper.loop(Looper.java:136)上
03-10 15:07:23.155:E/AndroidRuntime(29319):位于android.app.ActivityThread.main(ActivityThread.java:5081)
03-10 15:07:23.155:E/AndroidRuntime(29319):位于java.lang.reflect.Method.Invokenactive(本机方法)
03-10 15:07:23.155:E/AndroidRuntime(29319):位于java.lang.reflect.Method.invoke(Method.java:515)
03-10 15:07:23.155:E/AndroidRuntime(29319):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:783)
03-10 15:07:23.155:E/AndroidRuntime(29319):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
03-10 15:07:23.155:E/AndroidRuntime(29319):在dalvik.system.NativeStart.main(本机方法)
03-10 15:07:23.155:E/AndroidRuntime(29319):由以下原因引起:java.lang.NullPointerException
03-10 15:07:23.155:E/AndroidRuntime(29319):位于android.content.ContextWrapper.getResources(ContextWrapper.java:89)
03-10 15:07:23.155:E/AndroidRuntime(29319):在android.view.ContextThemeWrapper.getResources(ContextThemeWrapper.java:78)
03-10 15:07:23.155:E/AndroidRuntime(29319):在android.widget.ArrayAdapter.createFromResource(ArrayAdapter.java:430)上
03-10 15:07:23.155:E/AndroidRuntime(29319):位于com.jrod.storagecalculator.CapacityCalculation.(CapacityCalculation.java:15)
03-10 15:07:23.155:E/AndroidRuntime(29319):位于java.lang.Class.newInstanceImpl(本机方法)
03-10 15:07:23.155:E/AndroidRuntime(29319):位于java.lang.Class.newInstance(Class.java:1208)
03-10 15:07:23.155:E/AndroidRuntime(29319):在android.app.Instrumentation.newActivity(Instrumentation.java:1061)上
03-10 15:07:23.155:E/AndroidRuntime(29319):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2122)
03-10 15:07:23.155:E/AndroidRuntime(29319):…还有11个

您必须添加此行:

spinnerCapacity = (Spinner) findViewById(R.id.spinnerCapacity);

我添加了这一行,但仍然得到了NullPointerExeception您的问题出现在第15行:
…(CapacityCalculation.java:15)
,给出了堆栈跟踪,它可能是
ArrayAdapter.createFromResource
中的一个