0

I am trying to loop through an ArrayList and add the record to array list if data doesn't already exist. if the data already exists it will just print out a message saying data already exist. However, I keep getting the error Caused by: java.lang.ClassCastException: android.text.SpannableStringBuilder cannot be cast to com.application.Contact

I have added my post and included the contact class below

private ArrayList<Contact> contacts = new ArrayList<Contact>();
private ArrayAdapter<Contact> adapter;
private ListView contactListView;

public void saveContact(View view) {
        EditText nameField = (EditText) findViewById(R.id.name);
        Contact name = (Contact) nameField.getText();
        EditText emailField=(EditText) findViewById(R.id.email);
        Contact email = (Contact) emailField.getText();
        EditText phoneField=(EditText) findViewById(R.id.mobile);
        Contact phone= (Contact) phoneField.getText();

        // Setup Adapter
        contactListView = (ListView) findViewById(R.id.contactsListView);
        adapter = new ArrayAdapter<Contact>(this,android.R.layout.simple_list_item_1, contacts);
        contactListView.setAdapter(adapter);

        for(int i=0;i<contacts.size();i++){

            if(contacts.get(i).name.equals(name)){
                Toast.makeText(this,"user exist",Toast.LENGTH_SHORT).show();

            }else {

                contacts.add(name);
                contacts.add(email);
                contacts.add(phone);
            }
        }

    }

public class Contact  {
    public String name;
    public String email;
    public String mobile;
    public Contact(String name, String email, String mobile) {
        this.name = name;
        this.email = email;
        this.mobile = mobile;
    }

    public String toString() {
        return name;
    }
}
user11766958
  • 409
  • 3
  • 12

5 Answers5

1
    EditText nameField = (EditText) findViewById(R.id.name);
    Contact name = (Contact) nameField.getText();

function getText returns Editable and you are trying to cast it to Contact. This is wrong. If you post your Contact class code than maybe we can figure out how to fix it. But for now I only can say that you are doing something wrong

EDIT

private ArrayList<Contact> contacts = new ArrayList<Contact>();
private ArrayAdapter<Contact> adapter;
private ListView contactListView;

public void saveContact(View view) {
        EditText nameField = (EditText) findViewById(R.id.name);
        String name = nameField.getText().toString();
        EditText emailField=(EditText) findViewById(R.id.email);
        String email = emailField.getText().toString();
        EditText phoneField=(EditText) findViewById(R.id.mobile);
        String mobile = phoneField.getText().toString());

        // Setup Adapter
        contactListView = (ListView) findViewById(R.id.contactsListView);
        adapter = new ArrayAdapter<Contact>(this,android.R.layout.simple_list_item_1, contacts);
        contactListView.setAdapter(adapter);

        boolean contactExist = false;
        for(int i=0;i<contacts.size();i++){
            if(contacts.get(i).name.equals(name)){
                contactExist = true;
                break;
            }
        }
        if (!contactExist) {
            contacts.add(new Contact(name, email, mobile));
        }
    }
Romadro
  • 626
  • 4
  • 10
0

You are casting SpananbleStringBuilder to Contact class, exactly as your error says

Try this

    EditText nameField = (EditText) findViewById(R.id.name);
    String name = nameField.getText().toString();
    EditText emailField=(EditText) findViewById(R.id.email);
    String email =  emailField.getText().toString();
    EditText phoneField=(EditText) findViewById(R.id.mobile);
    String phone=  phoneField.getText().toString();
Lakhwinder Singh
  • 6,799
  • 4
  • 25
  • 42
0

Try this code. I think you will get what you needed perfectly.

private ArrayList<Contact> contacts = new ArrayList<Contact>();
private ArrayAdapter<Contact> adapter;
private ListView contactListView;

public void saveContact(View view) {
        EditText nameField = (EditText) findViewById(R.id.name);
        //initialize a objects of contact class
        Contact contactObj = new Contact();
        contactObj.setName(nameField.getText().toString());
        EditText emailField=(EditText) findViewById(R.id.email);
        contactObj.setEmail(emailField.getText().toString());
        EditText phoneField=(EditText) findViewById(R.id.mobile);
        contactObj.setPhone(phoneField.getText().toString());

        // Setup Adapter
        contactListView = (ListView) findViewById(R.id.contactsListView);
        adapter = new ArrayAdapter<Contact>(this,android.R.layout.simple_list_item_1, contacts);
        contactListView.setAdapter(adapter);

        for(int i=0;i<contacts.size();i++){

            if(contacts.get(i).name.equals(contactObj.getName())){
                Toast.makeText(this,"user exist",Toast.LENGTH_SHORT).show();

            }else {
                contacts.add(contactObj);
            }
        }

    }
Rezaul Karim
  • 830
  • 8
  • 15
0

Firstly you are trying to parse an edittext to your model class (Contact), You will have to get the values from edittext and create an object of Contact class, then add it into the list. And make sure to use iterator to add while looping the array list example here

h_malik
  • 167
  • 1
  • 8
0

Try this code.

Contact contact= new Contact(); EditText nameField = (EditText) findViewById(R.id.name); contact.name=nameField.getText().toString; contacts.add(contact);

This problem is due to casting. You are trying to cast a string directly to a Class object. Fetch String using editText.getText.toString. I hope this will help you.

Nico Griffioen
  • 5,143
  • 2
  • 27
  • 36