主活动的Android Spinner问题
我想在应用程序的主要活动上添加一个微调器(如图中红色圆圈所示)。旋转器将用于血型采集。我使用了微调器的代码,我已经在另一个微调器中使用了该代码,用于在另一个活动中采集血型。另一个活动是注册表格。在那里效果很好。所以,我只是复制并粘贴代码,而没有出现错误。但在那之后,当我运行应用程序时,它在一开始就崩溃了,无法打开。我做错了什么主活动的Android Spinner问题,android,Android,我想在应用程序的主要活动上添加一个微调器(如图中红色圆圈所示)。旋转器将用于血型采集。我使用了微调器的代码,我已经在另一个微调器中使用了该代码,用于在另一个活动中采集血型。另一个活动是注册表格。在那里效果很好。所以,我只是复制并粘贴代码,而没有出现错误。但在那之后,当我运行应用程序时,它在一开始就崩溃了,无法打开。我做错了什么 package com.sarkerjr.greenBlood; 导入android.content.Intent; 导入android.support.design.
package com.sarkerjr.greenBlood;
导入android.content.Intent;
导入android.support.design.widget.FloatingActionButton;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.text.TextUtils;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.ArrayAdapter;
导入android.widget.Spinner;
导入com.sarkerjr.greenBlood.data.BloodContract;
公共类MainActivity扩展了AppCompatActivity{
//用于在搜索时选择血型的微调器
专用微调器mBloodTypeSpinner;
私有内特mBloodType;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//设置FAB以打开编辑器活动
FloatingActionButton fab=(FloatingActionButton)findViewById(R.id.fab);
fab.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
意向意向=新意向(MainActivity.this、EditorActivity.class);
星触觉(意向);
}
});
mBloodTypeSpinner=(Spinner)findViewById(R.id.Spinner\u血型);
//设置采血器旋转器
setupBloodTypeSpinner();
}
/**血型采集装置旋转器*/
私有void setupBloodTypeSpinner(){
//为微调器创建适配器。列表选项来自它将使用的字符串数组
//微调器将使用默认布局
ArrayAdapter血型SpinnerAdapter=ArrayAdapter.createFromResource(此,
R.array.array\u bloodType\u选项,android.R.layout.simple\u微调器\u项);
//指定下拉布局样式-简单列表视图,每行1项
血型SpinNerAdapter.setDropDownViewResource(android.R.layout.simple\u dropdown\u item\u 1line);
//将适配器应用于微调器
mBloodTypeSpinner.setAdapter(血型SpinnerAdapter);
//将选定的整数mSelected设置为常量值
mBloodTypeSpinner.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener()){
@凌驾
已选择公共视图(AdapterView父视图、视图视图、整型位置、长id){
字符串选择=(字符串)parent.getItemAtPosition(位置);
如果(!TextUtils.isEmpty(选择)){
if(selection.equals(getString(R.string.a_正数))){
mBloodType=BloodContract.DonorEntry.A_阳性;
}else if(selection.equals(getString(R.string.a_负值))){
mBloodType=BloodContract.DonorEntry.A_阴性;
}else if(selection.equals(getString(R.string.b_正数))){
mBloodType=BloodContract.DonorEntry.B_阳性;
}else if(selection.equals(getString(R.string.b_负值))){
mBloodType=BloodContract.DonorEntry.B_阴性;
}else if(selection.equals(getString(R.string.o_正数))){
mBloodType=BloodContract.DonorEntry.O_阳性;
}else if(selection.equals(getString(R.string.o_负值))){
mBloodType=BloodContract.DonorEntry.O_阴性;
}else if(selection.equals(getString(R.string.ab_正数))){
mBloodType=BloodContract.DonorEntry.AB_阳性;
}else if(selection.equals(getString(R.string.ab_负值))){
mBloodType=BloodContract.DonorEntry.AB_阴性;
}否则{
mBloodType=BloodContract.DonorEntry.TYPE_未知;
}
}
}
//因为AdapterView是一个抽象类,所以必须定义onNothingSelected
@凌驾
未选择公共无效(AdapterView父级){
mBloodType=BloodContract.DonorEntry.TYPE_未知;
}
});
}
}
这是堆栈跟踪报告(尽管我不能理解)
2019-03-01 21:06:32.417 23087-23087/com.sarkerjr.greenBlood E/AndroidRuntime:致命异常:main
流程:com.sarkerjr.greenBlood,PID:23087
java.lang.RuntimeException:无法启动活动组件信息{com.sarkerjr.greenBlood/com.sarkerjr.greenBlood.MainActivity}:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'void android.widget.Spinner.setAdapter(android.widget.SpinnerAdapter)'
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
位于android.app.ActivityThread.-wrap11(未知来源:0)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)上
位于android.os.Handler.dispatchMessage(Handler.java:106)
位于android.os.Looper.loop(Looper.java:164)
位于android.app.ActivityThread.main(ActivityThread.java:6494)
位于java.lang.reflect.Method.invoke(本机方法)
位于com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
原因:java.lang.NullPointerException:尝试调用虚拟方法'void android.widget.Spinner.setAdapter(a
package com.sarkerjr.greenBlood;
import android.content.Intent;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import com.sarkerjr.greenBlood.data.BloodContract;
public class MainActivity extends AppCompatActivity {
//Spinner for selecting blood group on search
private Spinner mBloodTypeSpinner;
private int mBloodType;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Setup FAB to open EditorActivity
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, EditorActivity.class);
startActivity(intent);
}
});
mBloodTypeSpinner = (Spinner) findViewById(R.id.spinner_bloodType);
//Set the blood picker spinner
setupBloodTypeSpinner();
}
/**Setup spinner for blood type pickup*/
private void setupBloodTypeSpinner() {
// Create adapter for spinner. The list options are from the String array it will use
// the spinner will use the default layout
ArrayAdapter bloodTypeSpinnerAdapter = ArrayAdapter.createFromResource(this,
R.array.array_bloodType_options, android.R.layout.simple_spinner_item);
// Specify dropdown layout style - simple list view with 1 item per line
bloodTypeSpinnerAdapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
// Apply the adapter to the spinner
mBloodTypeSpinner.setAdapter(bloodTypeSpinnerAdapter);
// Set the integer mSelected to the constant values
mBloodTypeSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
String selection = (String) parent.getItemAtPosition(position);
if (!TextUtils.isEmpty(selection)) {
if (selection.equals(getString(R.string.a_positive))) {
mBloodType = BloodContract.DonorEntry.A_Positive;
} else if (selection.equals(getString(R.string.a_negative))) {
mBloodType = BloodContract.DonorEntry.A_Negative;
} else if (selection.equals(getString(R.string.b_positive))) {
mBloodType = BloodContract.DonorEntry.B_Positive;
}else if (selection.equals(getString(R.string.b_negative))) {
mBloodType = BloodContract.DonorEntry.B_Negative;
}else if (selection.equals(getString(R.string.o_positive))) {
mBloodType = BloodContract.DonorEntry.O_Positive;
}else if (selection.equals(getString(R.string.o_negative))) {
mBloodType = BloodContract.DonorEntry.O_Negative;
}else if (selection.equals(getString(R.string.ab_positive))) {
mBloodType = BloodContract.DonorEntry.AB_Positive;
}else if (selection.equals(getString(R.string.ab_negative))) {
mBloodType = BloodContract.DonorEntry.AB_Negative;
} else{
mBloodType = BloodContract.DonorEntry.TYPE_UNKNOWN;
}
}
}
// Because AdapterView is an abstract class, onNothingSelected must be defined
@Override
public void onNothingSelected(AdapterView<?> parent) {
mBloodType = BloodContract.DonorEntry.TYPE_UNKNOWN;
}
});
}
}
2019-03-01 21:06:32.417 23087-23087/com.sarkerjr.greenBlood E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.sarkerjr.greenBlood, PID: 23087
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sarkerjr.greenBlood/com.sarkerjr.greenBlood.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Spinner.setAdapter(android.widget.SpinnerAdapter)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Spinner.setAdapter(android.widget.SpinnerAdapter)' on a null object reference
at com.sarkerjr.greenBlood.MainActivity.setupBloodTypeSpinner(MainActivity.java:57)
at com.sarkerjr.greenBlood.MainActivity.onCreate(MainActivity.java:41)
at android.app.Activity.performCreate(Activity.java:7009)
at android.app.Activity.performCreate(Activity.java:7000)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)