如何修复android.support.v7.widget.AppCompatEditText无法强制转换为java.lang.CharSequence

时间:2017-02-26 20:37:59

标签: java android sqlite android-sqlite

我在Android Studio中制作一个应用程序,允许用户将商品添加到购物清单中。我无法实现数据库的添加功能。我希望用户能够在两个编辑文本框中键入项目名称和数量,然后将这些信息存储在我的数据库中。在设置数据库并尝试实现添加功能时,我使用了these tutorials

目前,当我运行代码时,它会在我的设备上显示应用程序;但当我单击按钮转到此活动所代表的页面时,我收到此错误并且应用程序崩溃:

  

android.support.v7.widget.AppCompatEditText无法强制转换为java.lang.CharSequence

以下是我在活动中的代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    id = getIntent().getIntExtra(MainActivity.KEY_ID, 0);

    setContentView(R.layout.activity_add);
    EditText addAnItem = (EditText) findViewById(R.id.add_item);
    EditText addQuantity = (EditText) findViewById(R.id.add_quantity);
    saveButton = (Button) findViewById(R.id.saveButton);
    saveButton.setOnClickListener(this);

    DBHandler db = new DBHandler(this);
    addAnItem.setText((CharSequence)addAnItem);
    addAnItem.setFocusable(false);
    addAnItem.setClickable(false);
    addQuantity.setText((CharSequence)addQuantity);
    addQuantity.setFocusable(false);
    addQuantity.setClickable(false);
}

public void onClick(View view) {
    String itemName = addAnItem.getText().toString();
    String itemQuantity = addQuantity.getText().toString();
    db.addItem(new Item(id, itemName, itemQuantity));
}

数据库添加功能:

public void addItem(Item item) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(KEY_NAME, item.getItemName());
    values.put(KEY_QUANTITY, item.getItemQuantity());
    db.insert(TABLE_LITEMS, null, values);
    db.close();
}

项目类:

public class Item {
    private int id;
    private String itemName;
    private String itemQuantity;

    public Item(){
    }

    public Item(int id,String itemName,String itemQuantity){
        this.id=id;
        this.itemName=itemName;
        this.itemQuantity=itemQuantity;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setItemName(String itemName){
        this.itemName = itemName;
    }

    public void setItemQuantity(String itemQuantity){
        this.itemQuantity = itemQuantity;
    }

    public int getId() {
        return id;
    }

    public String getItemName(){
        return itemName;
    }

    public String getItemQuantity(){
        return itemQuantity;
    }
}

我在活动中使用了CharSequence,因为否则它会给我

  

无法解析方法setText(android.widget.EditText)

我无法找到解决该错误的其他方法。

为了将用户提供的项目添加到我的数据库,我可以对代码进行哪些修改?

2 个答案:

答案 0 :(得分:0)

onCreate使用

   addAnItem.setText(addAnItem..getText().toString());
   addQuantity.setText(addQuantity.getText().toString());

而不是

  addAnItem.setText((CharSequence)addAnItem);
  addQuantity.setText((CharSequence)addQuantity);

答案 1 :(得分:0)

EditText是一个视图对象,而setText方法则使用String或CharSequence。 你不能设置文本来查看对象,它没有意义。你想要的是

String text = addAnItem.getText().toString();
addAnItem.setText(text);

但是我仍然不明白你的代码应该做什么,你是在为自己设置视图的文本吗?