2014-07-24 17 views
1

我想将项目添加到微调框,但出现错误“不幸的是,我的应用程序已停止工作”。我在strings.xml中创建了一个字符串数组,其中我有一些项目。当用户从MainActivity中选择添加项目时,会出现一个带有按钮的editText,并且我想要将editText中的任何内容传递给微调器。微调器位于activity_main.xml中,我正在处理addactivity.xml。我如何将新项目从EditText(在addactivity.xml和AddActivity.java中)传递给MainActivity.java和activity_main.xml中的微调器?将项目添加到微调框

这里是我的代码:

public class AddActivity extends Activity{ 

Spinner spnr1; 
EditText edtxAddActivity; 
ArrayAdapter<String> spinnerAdapter; 
Button btnAddActivity; 
String[] actArray; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.addactivity); 
    addActivityButton(); 

} 

public void addActivityButton() { 
    // TODO Auto-generated method stub 
    edtxAddActivity = (EditText) findViewById(R.id.etAddActivity); 
    spnr1 = (Spinner) findViewById(R.id.spinner1); 
    actArray = getResources().getStringArray(R.array.activities_array); 
    spinnerAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,actArray); 
    spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spnr1.setAdapter(spinnerAdapter); 
    btnAddActivity= (Button) findViewById(R.id.btAddActivity); 

    btnAddActivity.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 

      String newactivity = "" + edtxAddActivity.getText().toString(); 
      spinnerAdapter.add(newactivity); 

      spinnerAdapter.notifyDataSetChanged(); 
     }  
    }); 
} 

}

这是我的strings.xml文件:

<?xml version="1.0" encoding="utf-8"?> 

<string name="app_name">MyAdroidApp</string> 
<string name="activity_prompt">Choose an activity</string> 

<string-array name="activities_array"> 
    <item>5-a-side</item> 
    <item>Football</item> 
    <item>Basketball</item> 
    <item>Table Tennis</item> 
    <item>Add</item> 
</string-array> 

显示的错误如下。

07-24 14:08:43.397: E/AndroidRuntime(24798): FATAL EXCEPTION: main 
07-24 14:08:43.397: E/AndroidRuntime(24798): Process: com.example.myAndroidApp, PID: 24798 
07-24 14:08:43.397: E/AndroidRuntime(24798): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myAndroidApp/com.example.myAndroidApp.AddActivity}: java.lang.NullPointerException 
07-24 14:08:43.397: E/AndroidRuntime(24798): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184) 
07-24 14:08:43.397: E/AndroidRuntime(24798): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233) 
07-24 14:08:43.397: E/AndroidRuntime(24798): at android.app.ActivityThread.access$800(ActivityThread.java:135) 
07-24 14:08:43.397: E/AndroidRuntime(24798): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
07-24 14:08:43.397: E/AndroidRuntime(24798): at android.os.Handler.dispatchMessage(Handler.java:102) 
07-24 14:08:43.397: E/AndroidRuntime(24798): at android.os.Looper.loop(Looper.java:136) 
07-24 14:08:43.397: E/AndroidRuntime(24798): at android.app.ActivityThread.main(ActivityThread.java:5001) 
07-24 14:08:43.397: E/AndroidRuntime(24798): at java.lang.reflect.Method.invokeNative(Native Method) 
07-24 14:08:43.397: E/AndroidRuntime(24798): at java.lang.reflect.Method.invoke(Method.java:515) 
07-24 14:08:43.397: E/AndroidRuntime(24798): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
07-24 14:08:43.397: E/AndroidRuntime(24798): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
07-24 14:08:43.397: E/AndroidRuntime(24798): at dalvik.system.NativeStart.main(Native Method) 
07-24 14:08:43.397: E/AndroidRuntime(24798): Caused by: java.lang.NullPointerException 
07-24 14:08:43.397: E/AndroidRuntime(24798): at com.example.myAndroidApp.AddActivity.addActivityButton(AddActivity.java:46) 
07-24 14:08:43.397: E/AndroidRuntime(24798): at com.example.socialactivities.AddActivity.onCreate(AddActivity.java:33) 
07-24 14:08:43.397: E/AndroidRuntime(24798): at android.app.Activity.performCreate(Activity.java:5231) 
07-24 14:08:43.397: E/AndroidRuntime(24798): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
07-24 14:08:43.397: E/AndroidRuntime(24798): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148) 
07-24 14:08:43.397: E/AndroidRuntime(24798): ... 11 more 

的问题是,spinnerAdapter产生一个NullPointerException,因为列表视图可能是空的或不初始化。我怎样才能初始化我的数组?我的字符串数组在值中是在array.xml中。在com.example.myAndroidApp.AddActivity.addActivityButton(AddActivity.java:46)

+0

是行56这一个:String newactivity =“”+ edtxAddActivity.getText()。toString();?也许你试图设置适配器两次,将spnr1.setAdapter(spinnerAdapter)放在spnr1 = findViewById(R.id.spinner1) – Sherekan

+0

以下如果我这样做,我的应用程序甚至不能进入页面AddActivity。它说“不幸......”。 – user3561214

+0

什么是第56行? – Sherekan

回答

0

NullPointerException异常

意味着你referecing和使用的东西,是空的那一刻。从外观上看,它可能是您的视图参考之一。我的建议是把一些调试检查点一行代码和执行应用程序,并按照一步步搞清楚什么是空

+0

这条消息以调试模式出现:你的内容必须有一个ListView,其id属性是'android.R.id.list' – user3561214

+0

所有人都没有提到listview,我们正在谈论spinners。其次,你不需要使用id = android.R.id.list的listview,android.R.id.list是一个android id,因此你可以使用android.R.id.list和android.R.id .empty,它们会自动进行通信,设置setEmptyView()。只要在xml中选择的id与在java中选择的id相同,对该对象的引用将保持不变 – nunoh123

0

看看R.layout.addactivity布局,你错过了什么,特别是我认为findViewById( R.id.etAddActivity);是空,意味着你没有它在布局或smtg是错误的,它的namie,身份证左右

+0

AddActivity.java类不包含微调器。 MainActivity.java,在addactivity.xml中只有一个EditText和一个按钮,当我按下按钮时,我想让EditText中的任何东西进入到activity_main.xml中的微调器中,然后返回到MainActivity.java。我想引用另一个xml文件的旋转器? – user3561214

+0

Spinner spinner =(Spinner)findViewById(R.id.mySpinner); ArrayAdapter spinnerAdapter = new ArrayAdapter (this,android.R.layout.simple_spin ner_item,android.R.id.text1); spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(spinnerAdapter); spinnerAdapter.add(“value”); spinnerAdapter.notifyDataSetChanged();这适用于我,所以在调试模式下启动,并在微调初始化时放置断点,你错过smtg,微调或editText为空,也许你有一个错误的编号错误ID –

+0

此消息出现在调试模式:你的内容必须有一个ListView,其id属性是'android.R.id.list' – user3561214