Struct-Array nicht aktualisiert, Funktionsaufruf gibt alte Werte zurück

Ich habe die folgende Methode im Vertrag mit der Struktur erstellt

contract testContract{
  Student[] public students;

  struct Student{
    string name;
    uint256 age;
  }

  function addStudent(string name, uint256 age){
    students[students.length++] = Student({name:name,age:age});
  }
}

Jetzt mit ethereumj rufe ich die Funktion für den bereitgestellten Vertrag wie folgt auf:

studentContract.callFunction("addStudent","ajay", 15);
Object[] objectArray = studentContract.callConstFunction("students");

Das Objekt-Array hat die Länge 2 und enthält die Werte "ajay" und 15, was in Ordnung ist.

aber wenn ich die Funktion zum zweiten Mal wie folgt aufrufe:

studentContract.callFunction("addStudent","ajay", 15);
Object[] objectArray = studentContract.callConstFunction("students");
studentContract.callFunction("addStudent", "narendra", 17);
objectArray = studentContract.callConstFunction("students");

Diesmal sollte das Objektarray 4 Werte enthalten, dh "ajay",15,"narendra",17.

Aber es behält immer noch nur die älteren Werte bei und die Länge wird nicht erhöht, objectArray hat die Größe 2 mit den Werten "ajay",15.

Bitte jemand eine Antwort darauf geben.

Haben Sie versucht, es mit einem Index aufzurufen? dh. Object[] objectArray = studentContract.callConstFunction("students", 0);Ich weiß nicht, wie ethereumj funktioniert, aber Studenten sind ein Array.
Ismael, du hast mich wirklich zum Lächeln gebracht. Das hat ganz gut funktioniert.
Solidity kann mehrere Rückgabewerte haben, also ist Array hier

Antworten (2)

Würde das funktionieren?

students.push(Student({name:name,age:age}));
Wo soll ich den obigen Code schreiben?
Anstatt vonstudents[students.length++] = Student({name:name,age:age});
soll ich es schreiben students.push(Student({name:name,age:age})); anstelle von students[students.length++] = Student({name:name,age:age});
ja wie gesagt...
es funktioniert nicht. Bitte helfen Sie, wenn Sie können. Bitte versuchen Sie die von Ihnen vorgeschlagenen Lösungen an Ihrem Computer :(. Ich bin im Moment sehr verzweifelt.
@Ronald Kofler Sie haben eine neue Möglichkeit geschaffen, Elemente in Arrays zu verschieben, also stimmen Sie für Sie ab :)

Object[] objectArray = studentContract.callConstFunction("students", index);

Dabei kann Index ein ganzzahliger Wert sein, der den Index der Elemente im Schülerarray angibt.

Wenn Sie also auf das zweite Element im Array zugreifen möchten, benötigen Sie index=1 als Wert von index.

Antwort im Namen von @Ismael