Java Android adapter.add()使我的应用程序崩溃

Java Android adapter.add()使我的应用程序崩溃,java,android,android-arrayadapter,android-spinner,Java,Android,Android Arrayadapter,Android Spinner,在android应用程序中,我用来自EditText对象的一些数据填充微调器。 当我试图用adapter.add(somestring)方法添加它时,它会崩溃,所以我需要帮助。 …这是密码 public class OptionsMenu extends Activity implements View.OnClickListener{ Spinner users; EditText input; Button add,remove; public stati

在android应用程序中,我用来自EditText对象的一些数据填充微调器。 当我试图用adapter.add(somestring)方法添加它时,它会崩溃,所以我需要帮助。 …这是密码

public class OptionsMenu extends Activity implements View.OnClickListener{

    Spinner users;
    EditText input;
    Button add,remove;

    public static String filename = "savedData";
    SharedPreferences sharedData;
    String stringUsers;

   ArrayAdapter<CharSequence> adapter;

   public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.options_menu);

        Create();
        sharedData = getSharedPreferences(filename, 0);    
   }

private void Create() {
    // TODO Auto-generated method stub
    users = (Spinner) findViewById(R.id.sp_op_users);
    input = (EditText) findViewById(R.id.tb_op_inputUsers);
    add = (Button) findViewById(R.id.bt_op_add);
    remove = (Button) findViewById(R.id.bt_op_remove);

    add.setOnClickListener(this);
    remove.setOnClickListener(this);

    //------------ADAPTER-----------------  
    adapter = ArrayAdapter.createFromResource(this, R.array.users,
                        android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource(
                android.R.layout.simple_spinner_dropdown_item);

    users.setAdapter(adapter);
}

public void onClick(View v) {
    // TODO Auto-generated method stub
    switch(v.getId())
    {
        case R.id.bt_op_add:
            if (!input.getText().toString().equals("")) {
                CharSequence inputData = input.getText().toString();
                adapter.add(inputData);

                adapter.notifyDataSetChanged();
                users.setAdapter(adapter);
            }
            input.setText("");
            users.setSelection(Adapter.NO_SELECTION);
            break;
        case R.id.bt_op_remove:
            break;
    }
}   
公共类选项菜单扩展活动实现View.OnClickListener{
微调器用户;
编辑文本输入;
按钮添加、删除;
公共静态字符串filename=“savedData”;
SharedReferences sharedData;
字符串用户;
阵列适配器;
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.options_菜单);
创建();
sharedData=GetSharedReferences(文件名,0);
}
私有void Create(){
//TODO自动生成的方法存根
用户=(微调器)findViewById(R.id.sp_op_用户);
输入=(EditText)findViewById(R.id.tb_op_inputUsers);
add=(按钮)findViewById(R.id.bt_op_add);
移除=(按钮)findViewById(R.id.bt\u op\u移除);
add.setOnClickListener(这个);
remove.setOnClickListener(这个);
//------------适配器------------------
adapter=ArrayAdapter.createFromResource(此,R.array.users,
android.R.layout.simple\u微调器(项目);
adapter.setDropDownViewResource(
android.R.layout.simple\u微调器\u下拉菜单\u项);
setAdapter(适配器);
}
公共void onClick(视图v){
//TODO自动生成的方法存根
开关(v.getId())
{
案例R.id.bt_op_添加:
如果(!input.getText().toString()等于(“”){
CharSequence inputData=input.getText().toString();
adapter.add(输入数据);
adapter.notifyDataSetChanged();
setAdapter(适配器);
}
input.setText(“”);
users.setSelection(适配器.无_选择);
打破
案例R.id.bt_op_移除:
打破
}
}   

不太清楚为什么会出现错误,但如果条件不正确,请检查您的

更改以下行:

if (input.getText().toString() != "") 

您不能使用
=
符号来比较
字符串

编辑

也许您可以首先从资源文件中获取阵列并创建其本地版本:

String[] usersList=getResources().getStringArray(R.array.users);

adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, usersList)
String[]usersList=getResources().getStringArray(R.array.users);
adapter=new ArrayAdapter(这个,android.R.layout.simple\u微调器\u项,usersList)

并将此
usersList
用作
适配器的数据列表

不太清楚为什么会出现错误,但如果
条件错误,则使用

更改以下行:

if (input.getText().toString() != "") 

您不能使用
=
符号来比较
字符串

编辑

也许您可以首先从资源文件中获取阵列并创建其本地版本:

String[] usersList=getResources().getStringArray(R.array.users);

adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, usersList)
String[]usersList=getResources().getStringArray(R.array.users);
adapter=new ArrayAdapter(这个,android.R.layout.simple\u微调器\u项,usersList)

并使用此
usersList
作为
适配器的数据列表

您使用
createFromResource()创建了适配器
并从您的资源中为其提供了数据。如果您这样做,列表是固定的,您无法向列表中添加或删除元素。这就是为什么在您尝试调用
适配器.add()时列表崩溃的原因。

如果希望微调器包含动态数据,则必须使用
add()
将所有元素添加到微调器中,而不是从资源中创建它

编辑:添加代码示例

在onCreate()中,我们创建并初始化微调器适配器

List<String> items = ... // These are your items you get from a resource or read
                         //  from a file or whatever
// Create the adapter, initializing it with the list of items, attach to spinner
adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item);
for (String item : items) {
    adapter.add(item);
}
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
users.setAdapter(adapter);

您使用
createFromResource()
创建了适配器,并从您的资源中为其提供了数据。如果您这样做,列表是固定的,您无法向其中添加或删除元素。这就是为什么在您尝试调用
adapter.add()
时它崩溃的原因

如果希望微调器包含动态数据,则必须使用
add()
将所有元素添加到微调器中,而不是从资源中创建它

编辑:添加代码示例

在onCreate()中,我们创建并初始化微调器适配器

List<String> items = ... // These are your items you get from a resource or read
                         //  from a file or whatever
// Create the adapter, initializing it with the list of items, attach to spinner
adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item);
for (String item : items) {
    adapter.add(item);
}
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
users.setAdapter(adapter);

你能发布堆栈跟踪吗?你能发布堆栈跟踪吗?当我实现usersList时有一些错误,但是有没有一种方法可以完全绕过整个数组中的资源项…因为我最终会将所有微调器项保存在外部存储中…当我实现usersList时有一些错误,但是有没有一种方法可以完全绕过整个数组来自资源的数组…因为我最终会将所有微调器项保存在外部存储器中…我编辑我的答案是为了为您添加一些代码。我没有通过编译器运行它,所以如果我遗漏了分号或右括号,请原谅。希望您能理解。我编辑我的答案是为了为您添加一些代码。我没有通过编译器运行它gh是一个编译器,所以如果我遗漏了分号或右括号,请原谅。希望你能理解。