首页 文章

Gson JsonArray中的NoSuchMethodException

提问于
浏览
1

所以我偶然发现了这个错误,每当我尝试从JsonArray对象中删除一个元素时,我都会得到NoSuchMethodException . 但看了它坚实的一天后,我找不到它的原因 . 该方法存在于我的项目中包含的.jar文件中的已编译.class文件中 . 而我现在正处于亏损状态 . 当然问题出在椅子和键盘之间,但我只是看不到它

编辑:编译项目后我没有得到这个错误,所以这必须做一些eclipse如何管理依赖项,因为一个项目确实使用gson-2.2.4

我正在使用gson 2.3 jar,我通过maven包含它甚至下载了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

    您的构建设置有问题 .

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

  • 3

    您正在尝试修改正在迭代的集合 .

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

相关问题