Gson JsonArray中的NoSuchMethodException

时间:2014-11-03 21:51:08

标签: java gson

所以我偶然发现了这个错误,每当我尝试从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();
}

2 个答案:

答案 0 :(得分:3)

您的构建设置有问题。

JsonArray.remove(int)是在Gson 2.3版本中引入的。最有可能发生的事情是您正在编译正确的版本(2.3),但是在APK中打包的版本不是正确的版本。

答案 1 :(得分:0)

您正在尝试修改您正在重复的收藏品。

除了避免滥用调用toThis之外,你应该迭代集合并在必要时插入结果,然后分配整个事物。在您删除之前的元素后,其中一个元素将变为空。

相关问题