2010-11-01 2 views
0

J'ai créé une méthode appelée insertTable dans une classe appelée Table mais je ne peux pas l'utiliser dans ma méthode onClick dans le main classe:J'ai créé une méthode dans une autre classe mais je ne peux pas l'utiliser dans ma méthode onClick de la classe principale

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) { 

} 

je veux faire un income.insertTable dans la méthode onClick mais eclipse dire que je dois créer une variable locale. Quelqu'un peut-il m'aider?

Répondre

0

Vous devez faire un "revenu" une variable d'instance, comme ceci:

public class Main { 
    private Table income; 

    //... 
} 

changer cette ligne:

Table income = new Table(db,helper.TABLE_2); 

à ceci:

income = new Table(db,helper.TABLE_2); 

Vous devriez vérifier sur cette ressource pour plus d'informations sur les étendues variables: http://download.oracle.com/javase/tutorial/java/nutsandbolts/variables.html

+0

ok merci je n'ai pas pensé à ça. – Tsunaze

0

La variable income n'existe pas dans la méthode onClick() car vous l'avez déclarée comme locale à onCreate(). onClick() est en dehors du variable's scope. La solution la plus simple serait de faire income « globale » à la classe de l'activité globale:

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); 
    } 
} 

Vous pouvez le faire avec le reste des objets que vous avez créés dans onCreate() aussi bien.

+0

merci, wow stackoverflow est vraiment rapide =) – Tsunaze

0

Les réponses ci-dessus sont correctes. Je voudrais simplement ajouter dans le paradigme Android que vous allez utiliser les variables de champ un peu. La meilleure façon que j'ai trouvé à factoriser variables locales dans les champs efficacement dans ecilpse est:

raccourci clavier Sélectionnez la variable locale Maj + Alt + t, v

Menu Sélectionnez la variable locale Refactor => Convertir la variable locale en champ ... => OK

Questions connexes