2013-05-14 3 views
0

Я пытаюсь лучше понять SQLite для Android и столкнулся с проблемой. Моя тестовая программа просто имеет текстовое поле и кнопку. Когда вы вводите текст в текстовое поле и нажимаете кнопку, я хочу, чтобы он создал новый «контакт» (класс базы данных).Передача строки var через onClick

public class Home extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_home); 
    DatabaseHandler db = new DatabaseHandler(this); 
    String name = ""; 



    Button upButton = (Button) findViewById(R.id.button1); 

    upButton.setOnClickListener(new View.OnClickListener() {    
     @Override 
     public void onClick(View v, String name) { 
      EditText editText = (EditText)findViewById(R.id.editText1); 


      name = editText.getText().toString(); 
      TextView textView = (TextView)findViewById(R.id.textView2); 
      textView.setText(name); 


     } 

    }); 
    db.addContact(new Contact(1,name)); 
} 

}

Как вы видите, когда они нажимают это экономит все, что в текстовом поле в качестве имени. Я просто хочу иметь возможность отправить его на вызов функции addContact. Я также немного смутился о том, как использовать мой класс db внутри функции onClick? В идеале я просто хотел бы обновить его внутри onClick, или я бы?

+1

Почему 'db.addContact (новый контакт (1, имя));' не в функции onClick()? –

+0

Мне не удалось выяснить, как назвать его классом db внутри onClick, поэтому я пытался получить значение из onClick и передать его ему. – Nogg

ответ

1

Почему бы вам не написать код db.addContact(new Contact(1,name)); в onClickListener? Если вы не хотите этого, напишите метод в своем Activity, а затем позвоните ему из onClickListener.

private void addContact(String name) { 
    db.addContact(new Contact(1,name)); 
} 

onCreate() метод;

Button upButton = (Button) findViewById(R.id.button1); 
upButton.setOnClickListener(new View.OnClickListener() {    
    @Override 
    public void onClick(View v, String name) { 
     EditText editText = (EditText)findViewById(R.id.editText1); 

     name = editText.getText().toString(); 
     addContact(name); 
    } 

}); 
0

Это может быть достигнуто несколько способов, один из которых будет definining вашей db переменного как частные.

private DatabaseHandler mDatabaseHandler; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    mDatabaseHandler = new DatabaseHandler(this); 

    Button upButton = (Button) findViewById(R.id.button1); 
    upButton.setOnClickListener(new View.OnClickListener() {    
     @Override 
     public void onClick(View v, String name) { 
      EditText editText = (EditText)findViewById(R.id.editText1); 
      mDatabaseHandler .addContact(new Contact(1, editText.getText().toString())); 
     } 
    }); 
} 
+0

Ваш код по-прежнему вызывает ошибки в onClick с @override http://puu.sh/2Tu5m/f48c61aa99.png – Nogg

+0

@Nogg, это ваш код, я просто копирую/вставляю, чтобы показать концепцию. Если бы вы ожидали иметь полностью действующий код, то я сожалею, что не оправдал ваши ожидания :) – ozbek

+0

Ха-ха, нет, это прекрасно! Спасибо, что показал мне, что мне нужно. Думаю, я предполагал, что это сработает так же, как и лол. – Nogg