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.
Würde das funktionieren?
students.push(Student({name:name,age:age}));
students[students.length++] = Student({name:name,age:age});
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
Ismael
Object[] objectArray = studentContract.callConstFunction("students", 0);
Ich weiß nicht, wie ethereumj funktioniert, aber Studenten sind ein Array.Ajay Bhojak
Anton Naschatyrew