Reputation: 3580
i'm trying to do the following using smali:
ArrayList
field to a classadd
operation on the field in one of the class' methods.These are the relevant code snippets. (My class name is com.mypackage.MyClass
(i.e. com/mypackage/MyClass
))
In the # instance fields
section of the smali code, i added the line
.field private myList:Ljava/util/List;
In the public constructor method (.method public constructor <init>()V
), i added the lines
new-instance v1, Ljava/util/ArrayList;
invoke-direct {v1}, Ljava/util/ArrayList;-><init>()V
iput-object v1, p0, Lcom/mypackage/MyClass;->myList:Ljava/util/List;
And finally, in the instance methods where i want to perform the add
method calls, i added the lines
iget-object v6, p0, Lcom/mypackage/MyClass;->myList:Ljava/util/List;
invoke-interface {v6, v3}, Ljava/util/List;->add(Ljava/lang/Object;)Z
invoke-interface {v6, v4}, Ljava/util/List;->add(Ljava/lang/Object;)Z
However, the line
iget-object v6, p0, Lcom/mypackage/MyClass;->myList:Ljava/util/List;
gives me the error (according to logcat)
10-29 15:47:58.999: W/dalvikvm(518): VFY: 'this' arg 'Ljava/util/List;' not instance of 'Lcom/mypackage/MyClass;'
I compared what I did with a similar method call in the same method, and couldn't figure out what was wrong.
Any idea?
Thanks!
Upvotes: 2
Views: 1961
Reputation: 20282
The p0 register contains the "this" reference when the method enters, but anything can modify it afterwards. Based on that error message, it looks like the p0 regsiter has a List object in it, at the point where the iget-object is.
Upvotes: 2