/ / NoSuchMethodError für den VIew-Konstruktor - Java, Android

NoSuchMethodError auf View-Konstruktor - Java, Android

Ich instantiiere eine View zur Laufzeit und funktioniert 99,99% der Zeiten, aber einige Benutzer haben berichtet, dass sie abstürzt, wenn ein NoSuchMethodError ausgelöst wird.

Ich instantiiere die Ansicht auf diese Weise, und dort, wo der Fehler ausgegeben wird:

AddAPostView addAPostView = new AddAPostView(getContext());

Und das ist der Code für die View:

public class AddAPostView extends LinearLayout {

public AddAPostView(Context context) {
super(context);
init();
}

public AddAPostView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}

public AddAPostView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}

private void init() {
...
}
}

Ich habe den Bericht über Google Analyics erhalten, daher habe ich nur die Zeile, in der der Fehler generiert wird.

Wie ist es möglich, dass ein derart einfacher Code manchmal einen solch drastischen Fehler auslöst? Wie kann man das vermeiden?

Antworten:

2 für die Antwort № 1

Was ist dein minSdk? Wenn es unter 11 ist, dann Bingo.

Der Konstruktor mit drei Argumenten wurde in API 11 hinzugefügt. Auch wenn Sie ihn nicht verwenden, müssen alle Methoden gesucht werden, wenn die Klasse instanziiert wird NoSuchMethodError

3arg Konstruktor api 11

developer.android.com/LinearLayout.html#LinearLayout(android.content.Context)

(Es wird auf Ihrem Rechner wegen der targetSdk Sie setzen. )


2 für die Antwort № 2

NoSuchMethodError ist in der Regel ein Indikator dafür, dass Sie den Code eingebenkompiliert wird mit einer anderen Version der Klasse als der Code, der den Fehler ausgelöst hat. Grundsätzlich wäre der Code nicht kompiliert worden, wenn er die Methode nicht zur Kompilierzeit gefunden hätte. Die Tatsache, dass er kompiliert wurde, bedeutet, dass die Methode während der Kompilierung vorhanden ist. Außerdem kann der Code die Methode zur Laufzeit nicht finden Das bedeutet, dass eine andere Version der Klasse verwendet wird. Ich bin eher der Meinung, dass es sich um einen veralteten Code handelt, da Sie bereits erwähnt haben, dass nur wenige Benutzer den Fehler gemeldet haben ältere Version abhängiger Bibliotheken.

Bitte vergewissern Sie sich, dass die Benutzer, die dies gemeldet habenFehler: Lassen Sie die letzte Kopie Ihres Codes laufen. Die Versionen der abhängigen Bibliotheken sollten auch die gleichen sein, die Sie zum Kompilieren verwenden. Ich bin kein Android-Entwickler, aber ich habe in der ganzen Java-Welt oft ähnliche Fälle gesehen.