2017-05-27 4 views
-2

Natürlich weiß ich, dass eine nicht-statische-Methode von einem nicht-statischen Kontext aufgerufen werden muss.Nicht-statische Methode kann nicht von nicht-statische Methode in Android Studio aufgerufen werden

Und bin ich etwas fehlt, wenn ich denke, dass

public void methodName(int i) { ... } 

Non-Static ist?

Da Android Studio 2.3.2 es als statischen Kontext flaged so kann ich die folgende Anweisung aus dem Verfahren nicht nennen

enter image description here

Methode:

public void deleteCard(int id){ 
    for(int i = 0; i < cards.size(); i++){ 
     if(cards.get(i).id == id){ 
      cards.remove(i); 
      notifyItemRemoved(i); 
      notifyItemRangeChanged(i, cards.size()); 
     } 
    } 
} 
+1

Sie rufen es so auf, als ob es statisch wäre, anstatt es durch ein Instanzobjekt zu rufen – antlersoft

+1

Sie sollten 'new CardAdapter(). DeleteCard (id);' stattdessen tun. –

+0

Funktioniert ... nun, ich habe heute zumindest etwas Neues gelernt. Danke –

Antwort

1

Die Fehlermeldung während Kompilierung und die Meldung der Stack-Trace während einer Ausnahme während der Lebensdauer einer Anwendung gibt genügend Hinweis auf das Problem.

In Ihrem Fall heißt es eindeutig "Nicht statische Methode deleteCard(int) kann nicht aus einem statischen Kontext verwiesen werden". Hier sind Sie richtig, dass deleteCard ist nicht statisch und das gleiche ist offensichtlich, aus dem ersten Teil der Nachricht: "Nicht statische Methode deleteCard(int) ..", aber Sie haben den zweiten Teil der Nachricht, die über das Problem sagt, dh "... kann nicht von einem statischen Kontext referenziert werden ".

Sie sollten in einer solchen Situation sehen, wie Sie das Feld oder die Methode referenzieren. Sie verwenden einen Klassennamen, um die Methode aufzurufen. Es ist ein statischer Kontext.

Alle Mitgliedsinstanzfelder und -methoden benötigen eine Instanz ihrer Klasse und können dann nur über den Verweis auf dieses Objekt auf sie zugreifen. Nicht statische Mitgliedsfelder und Methoden gehören zu einem Objekt. Sie greifen auf nicht statische Felder eines Objekts zu und rufen nicht statische Methoden für ein Objekt auf. Dazu benötigen Sie eine Referenz der entsprechenden Klasse.

Sie benötigen ein Objekt der Klasse CardAdapter, um eine Instanzmembermethode aufzurufen, da die Methode nicht statisch ist.

+0

Ja, das einzige, was ich nicht verstanden habe, war die Definition eines statischen Kontextes. Ich dachte, dass jede Methode ohne das Schlüsselwort 'statisch' nicht-statisch ist. –

Verwandte Themen