所以我偶然發現了這個錯誤,每當我嘗試從JsonArray對象中移除一個元素時,我都會得到NoSuchMethodException。但看了一整天之後,我找不到原因。該方法存在於包含在我的項目中的.jar文件中的已編譯的.class文件中。而我現在處於虧損狀態。當然問題是在椅子和鍵盤之間,但我只是沒有看到它Gson中的NoSuchMethodException JsonArray
編輯:在編譯項目後,我沒有得到這個錯誤,所以這必須做一些與日食如何管理依賴關係,因爲一個項目使用gson-2.2.4
我正在使用gson 2.3我通過maven包含的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我可以看到,行家我的項目使用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
從罐的javap ~/Downloads/gson-2.3/com/google/gson/JsonArray.class
輸出文件是在我的Java項目的類路徑
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(); }
堆棧跟蹤如何? – RealSkeptic 2014-11-03 22:11:11
'線程中的異常「main」java.lang.NoSuchMethodError:com.google.gson.JsonArray.remove(I)Lcom/google/gson/JsonElement;'這是整個堆棧跟蹤,那麼我的java文件就在我的項目和沒有其他跡象 – Gabriel 2014-11-03 22:15:04
你使用哪個ide?如果你正在使用Eclipse,你可以打開「打開類型」對話框(在mac:cmd + shift + t,windows:ctrl + shift + t)並寫入com.google.gson.JsonArray然後看到jar/jar嗎? – Devrim 2014-11-03 23:13:29