#sql #android #class #onclick
#sql #Android #класс #onclick
Вопрос:
я создал метод с именем insertTable в классе с именем Table, но я не могу использовать его в моем методе onClick в основном классе :
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
DatabaseHelper helper = new DatabaseHelper(this);
SQLiteDatabase db = helper.getWritableDatabase();
Table expense = new Table(db,helper.TABLE_1);
Table income = new Table(db,helper.TABLE_2);
Button add_btn = (Button)findViewById(R.id.add_btn);
EditText add = (EditText)findViewById(R.id.add);
add_btn.setOnClickListener(this);
}
public void onClick(View v) {
}
я хочу создать income.insertTable в методе onClick, но eclipse говорит, что мне нужно создать локальную переменную.
Кто-нибудь может мне помочь, плз?
Ответ №1:
Вы должны сделать «income» переменной экземпляра, вот так:
public class Main {
private Table income;
//...
}
и измените эту строку:
Table income = new Table(db,helper.TABLE_2);
к этому:
income = new Table(db,helper.TABLE_2);
Вы должны проверить этот ресурс для получения информации об областях действия переменных:
http://download.oracle.com/javase/tutorial/java/nutsandbolts/variables.html
Ответ №2:
Переменная income
не существует в onClick()
методе, потому что вы объявили ее локальной для onCreate()
. onClick()
находится за пределами области действия переменной. Самым простым решением было бы сделать income
«глобальным» для общего класса Activity:
public class MyClass extends Activity {
private Table income;
//Some other stuff here
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
DatabaseHelper helper = new DatabaseHelper(this);
SQLiteDatabase db = helper.getWritableDatabase();
Table expense = new Table(db,helper.TABLE_1);
// Notice how this next line has changed; you don't
// need to specify the type of income since it's
// already been declared
income = new Table(db,helper.TABLE_2);
Button add_btn = (Button)findViewById(R.id.add_btn);
EditText add = (EditText)findViewById(R.id.add);
add_btn.setOnClickListener(this);
}
public void onClick(View v) {
income.insertTable(someTable);
}
}
Вы могли бы сделать это и с остальными объектами, которые вы создали в onCreate()
.
Ответ №3:
Приведенные выше ответы верны. Я просто хотел бы добавить в парадигму Android, что вы собираетесь использовать переменные поля совсем немного. Лучший способ, который я нашел для эффективного преобразования локальных переменных в поля в ecilpse, — это:
Сочетание клавиш Выберите локальную переменную Shift Alt t, v
В меню выберите локальную переменную Refactor => Преобразовать локальную переменную в поле … => OK