所以我偶然发现了这个错误,每当我尝试从JsonArray对象中删除一个元素时,我都会得到NoSuchMethodException。但看了它坚实的一天后,我找不到它的原因。该方法存在于我的项目中包含的.jar文件中的已编译.class文件中。而我现在正处于亏损状态。当然问题出在椅子和键盘之间,但我只是没有看到它
编辑:在编译项目之后,我没有收到此错误,所以这必须对eclipse如何管理依赖项做一些事情,因为一个项目确实使用了gson-2.2.4我正在使用我通过maven包含的gson 2.3 jar,甚至自己下载了jar文件。
抛出错误的示例代码:
else if (current.isJsonObject() && hasBucket(current)) {
JsonElement buckets = current.getAsJsonObject().get(BUCKETS);
JsonElement next = null;
if (buckets.isJsonArray() && buckets.getAsJsonArray().size()>0) {
JsonArray arr = buckets.getAsJsonArray();
arr.remove(0); //<--- exception is thrown here
} else if (buckets.isJsonObject()) {
Set<Entry<String,JsonElement>> entrySet = buckets.getAsJsonObject().entrySet();
for (Entry<String, JsonElement> entry : entrySet) {
next = entry.getValue();
buckets.getAsJsonObject().remove(entry.getKey());
break;
}
}
}
当我使用maven编译我的项目时,我可以看到maven正在使用gson 2.3
[INFO] Expanding: /Users/####/.m2/repository/com/google/code/gson/gson/2.3/gson-2.3.jar into /Users/####/Documents/workspace/proj_name/target/assembly/work/gson-2.3.jar
从我的java项目的类路径中的jar文件输出javap ~/Downloads/gson-2.3/com/google/gson/JsonArray.class
Compiled from "JsonArray.java" public final class com.google.gson.JsonArray extends com.google.gson.JsonElement implements java.lang.Iterable { public com.google.gson.JsonArray(); com.google.gson.JsonArray deepCopy(); public void add(com.google.gson.JsonElement); public void addAll(com.google.gson.JsonArray); public com.google.gson.JsonElement set(int, com.google.gson.JsonElement); public boolean remove(com.google.gson.JsonElement); public com.google.gson.JsonElement remove(int); <---- It exists! public boolean contains(com.google.gson.JsonElement); public int size(); public java.util.Iterator iterator(); public com.google.gson.JsonElement get(int); public java.lang.Number getAsNumber(); public java.lang.String getAsString(); public double getAsDouble(); public java.math.BigDecimal getAsBigDecimal(); public java.math.BigInteger getAsBigInteger(); public float getAsFloat(); public long getAsLong(); public int getAsInt(); public byte getAsByte(); public char getAsCharacter(); public short getAsShort(); public boolean getAsBoolean(); public boolean equals(java.lang.Object); public int hashCode(); com.google.gson.JsonElement deepCopy(); }
答案 0 :(得分:3)
您的构建设置有问题。
JsonArray.remove(int)
是在Gson 2.3版本中引入的。最有可能发生的事情是您正在编译正确的版本(2.3),但是在APK中打包的版本不是正确的版本。
答案 1 :(得分:0)
您正在尝试修改您正在重复的收藏品。
除了避免滥用调用toThis之外,你应该迭代集合并在必要时插入结果,然后分配整个事物。在您删除之前的元素后,其中一个元素将变为空。