я создал метод в другом классе, но я не могу использовать его в моем методе onClick из основного класса

#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