0

I'm new at Android app development and I'm struggling with this... I've tried the next code but it crashes when I execute it, is not saving the data in the arrayList...

I have to store contactName, surname, email and phone from the edittexts and save them into arrayList<Contact> when click the button AddContact after fill up the fields.

By the way! I'm using Sugar ORM to store data in the database, thats why the newContact1.save(); in the very last lines

public class AddContact extends Activity{

    String contactName;
    String contactSurname;
    String contactEmail;
    String contactPhone;
    List<Contact> contacts = new ArrayList<Contact>();
    /*
    EditText txtContactName = (EditText) findViewById(R.id.txtContactName);
    EditText txtContactSurname = (EditText) findViewById(R.id.txtContactSurname);
    EditText txtContactEmail = (EditText) findViewById(R.id.txtContactEmail);
    EditText phone = (EditText) findViewById(R.id.txtPhone);
    Button btnAddContact = (Button) findViewById(R.id.btnAddContact);*/

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_contact);
        setTitle("Add Contact");
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.add_contact, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    public void getFirstName(View v){
        EditText contactName = (EditText) findViewById(R.id.txtContactName);
        contactName.getText().toString();
        Log.d("AddContact","First Name: "+contactName);
    }

    public void getSurname(View v){
        EditText contactSurname = (EditText) findViewById(R.id.txtContactSurname);
        contactSurname.getText().toString();
        Log.d("AddContact","Last Name: "+contactSurname);
    }

    public void getEmail(View v){
        EditText contactEmail = (EditText) findViewById(R.id.txtContactEmail);
        contactEmail.getText().toString();
        Log.d("AddContact","mail: "+contactEmail);
    }

    public void getContactPhone(View v){
        EditText contactPhone = (EditText) findViewById(R.id.txtContactPhone);
        contactPhone.getText().toString();
        Log.d("AddContact","Phone number: "+contactPhone);
    }

    public void saveNewContact(String contactName, String contactSurname, String contactPhone, String contactEmail){
        Contact newContact1 = new Contact(contactName, contactSurname, contactPhone, contactEmail);
        newContact1.save();
    }
}
1
  • Post the stacktrace from the crash. Also, is it crashing when it first loads or after pushing a button? Commented Mar 24, 2015 at 19:48

4 Answers 4

1

When nothing is inputted in EditText, the following will result in a crash:

contactName.getText().toString();

It is always advisable to check for null:

if (contactName.getText() != null) {
    contactName.getText().toString();
}

How to save the data from EditText to ArrayList:
Store data extracted from EditText to String variables and then write to ArrayList

String contactNameStr = contactName.getText().toString();
String contactSurnameStr = contactSurname.getText().toString();
//Similarly do for others


Contact newContact1 = new Contact(contactNameStr, contactSurnameStr, contactPhone, contactEmail);
Sign up to request clarification or add additional context in comments.

Comments

1

Create an onClickHanlder for the button (which would be useful to indicate that the user is done with entering the name) so that you can get the text from the EditText, convert it to a String, and add it to your ArrayList

Try this:

contactName.add(myEditText.getText().toString().trim());

contactSurname.add(myEditText.getText().toString().trim());

Hope this will help!

Comments

1

This is your final code

public class AddContact extends Activity{

EditText txtContactName;
EditText txtContactSurname;
EditText txtContactEmail;
EditText phone;
Button btnAddContact;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_add_contact);
    txtContactName = (EditText) findViewById(R.id.txtContactName);
    txtContactSurname = (EditText) findViewById(R.id.txtContactSurname);
    txtContactEmail = (EditText) findViewById(R.id.txtContactEmail);
    phone = (EditText) findViewById(R.id.txtPhone);
    btnAddContact = (Button) findViewById(R.id.btnAddContact);
    btnAddContact.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            addContact();
        }
    });
}

private void addContact() {
    String name = txtContactName.getText().toString();
    String sirName = txtContactSurname.getText().toString();
    String email = txtContactEmail.getText().toString();
    String phoneNumber = phone.getText().toString();
    Contact newContact1 = new Contact(name, sirName, email, phoneNumber);
    newContact1.save();


  }
}

Comments

0

I've sorted it out by doing this just in one method! It works fine and the contacts are saved in the arraylist :))

public void getData(View v){
    EditText contactName = (EditText) findViewById(R.id.txtContactName);
    String contactNameStr = contactName.getText().toString();
    EditText contactSurname = (EditText) findViewById(R.id.txtContactSurname);
    String contactSurnameStr= contactSurname.getText().toString();
    EditText contactEmail = (EditText) findViewById(R.id.txtContactEmail);
    String contactEmailStr = contactEmail.getText().toString();
    EditText contactPhone = (EditText) findViewById(R.id.txtContactPhone);
    String contactPhoneStr = contactPhone.getText().toString();
    Contact newContact1 = new Contact(contactNameStr, contactSurnameStr, contactPhoneStr, contactEmailStr);
    newContact1.save();

} 

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.