【问题标题】:Add Items to a spinner将项目添加到微调器
【发布时间】:2014-07-28 15:25:47
【问题描述】:

我正在尝试将项目添加到微调器,但我收到错误消息“不幸的是,我的应用程序已停止工作”。我在 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 产生一个空指针异常,因为列表视图可能为空或未初始化。如何初始化我的数组?我的字符串数组在值的array.xml 中。

【问题讨论】:

  • 第 56 行是这个:String newactivity = "" + edtxAddActivity.getText().toString();?也许您尝试设置适配器两次,将 spnr1.setAdapter(spinnerAdapter) 放在 spnr1 = findViewById(R.id.spinner1) 下面
  • 如果我这样做,我的应用程序甚至无法进入 AddActivity 页面。它说“不幸的是......”。
  • @user3561214 添加你的这个 spnr1.setAdapter(spinnerAdapter);在 Button Listner 之前和 onclick 中仅使用 String newactivity = "" + edtxAddActivity.getText().toString(); spinnerAdapter.add(newactivity); spinnerAdapter.notifyDataSetChanged();
  • 我已经更新了错误日志。现在第 60 行是 spnr1.setAdapter(spinnerAdapter);
  • 我一直认为你添加了两次适配器,试试@IrshadKhan 告诉你的,它应该可以工作

标签: spinner arrays


【解决方案1】:

com.example.myAndroidApp.AddActivity.addActivityButton(AddActivity.java:46) 处的 NullPointerException

表示您正在引用并使用当时为空的内容。从外观上看,它可能是您的视图参考之一。我的建议是在每一行代码中放置一些调试检查点并执行应用程序,然后逐步找出什么是 null

【讨论】:

  • 此消息在调试模式下出现:您的内容必须有一个 id 属性为 'android.R.id.list' 的 ListView
  • 首先没有人提到列表视图,我们谈论的是微调器。其次,您不需要“需要具有 id = android.R.id.list 的列表视图。android.R.id.list 是使用的 android id,因此您可以拥有 android.R.id.list 和 android.R.id .empty 并且它们通过设置 setEmptyView() 自动通信。只要在 xml 中选择的 id 与在 java 中选择的相同,对对象的引用将保持不变
【解决方案2】:

看看 R.layout.addactivity 布局,你错过了一些东西,尤其是我认为 findViewById(R.id.etAddActivity);为 null,表示您在布局中没有它,或者 smtg 的 namie、id 等错误

【讨论】:

  • AddActivity.java 类不包含微调器。这是 MainActivity.java 。在 addactivity.xml 中只有一个 EditText 和一个按钮。当我按下按钮时,我希望 EditText 中的任何内容进入 activity_main.xml 中的微调器并返回到 MainActivity.java。我将如何引用其他 xml 文件的微调器?
  • 微调器微调器 = (Spinner)findViewById(R.id.mySpinner); ArrayAdapter spinnerAdapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, android.R.id.text1); spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(spinnerAdapter); spinnerAdapter.add("值"); spinnerAdapter.notifyDataSetChanged();这对我有用,所以从调试模式开始并在微调器初始化时放置断点,你错过了 smtg,微调器或 editText 为空,也许你在微调器的 id 中有错字......
  • 此消息在调试模式下出现:您的内容必须有一个 id 属性为 'android.R.id.list' 的 ListView
  • 如果你的activity扩展了ListActivity,把它改成Activity,或者看看stackoverflow.com/questions/11050817/…stackoverflow.com/questions/16080466/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-11
  • 1970-01-01
  • 2017-01-23
  • 2019-08-20
相关资源
最近更新 更多