我用Android Studio開發app,自己寫接口,需要使用json,于是涉及到Json的使用,然而在使用過程中也踩到了不少坑。
1、JSONObject 包的引用。
一種是:
import org.json.JSONObject;
但是引用之後,發現網上有的代碼為
JSONObject.fromObject(result);
而這個包裡是沒有fromObject以及一些其他方法的。
後來上網去查找,發現他們用的是另外一個包。下面講的主要是這個包
我們使用的是
import net.sf.json.JSONObject;
這個需要依賴以下的幾個包:
commons-beanutils-1.8.0.jar、commons-collections、commons-lang-2.4、commons-logging-1.1、ezmorph-1.0.4、json-lib-2.3-jdk15
都需要添加到Android Studio的 Lib中,一個都不能少。
接下來我去網上下載下傳了幾個版本的jar包,那些
2、問題一:一口氣将這幾個包同時複制到lib目錄中,然後“add as library”,編譯後發現某些包有問題,編譯不同。(問題沒有截圖)
後來定位到項目中的目錄,發現有個别jar包居然為0kb!坑爹,删除後重新複制一遍進去。解決問題。
3、我原本在網上下載下傳的某個包為:commons-beanutils-1.8.0.jar
再添加進去的時候,編譯報錯。
Duplicate class org.apache.commons.collections.ArrayStack found in modules commons-beanutils-1.8.0.jar (commons-beanutils-1.8.0.jar) and commons-collections.jar (commons-collections.jar)
大意是org.apache.commons.collections.ArrayStack這個方法在 (commons-collections.jar)和(commons-beanutils-1.8.0.jar)中重複了。
于是試着把commons-beanutils-1.8.0.jar給删除了,程式就能運作不報錯了。如執行以下代碼都沒有問題
JSONObject json = new JSONObject();
json.put("userName", userName);
json.put("password", password);
但是在執行到這個操作的時候,又報錯了。
JSONObject jsonObject = JSONObject.fromObject(result);
boolean isError = jsonObject.getBoolean("successs");
錯誤為:
java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/commons/beanutils/DynaBean;
到此,看到“beanutils”,我是明白了,因為我剛剛删除了commons-beanutils-1.8.0.jar的原因。
看來那幾個依賴包,一個都不能少!
那之是以之前沒删除之前,仍舊出現編譯錯誤的原因,就隻可能是依賴包的版本不一緻了!
下載下傳的時候說“(完整直接可用版)”和“所需全部JAR包”都是騙人的!!我那個傷心啊!折騰了那麼久。
于是我意外發現了 commons-beanutils的官網,抱着試試的态度,下載下傳了最新版的commons-beanutils-1.9.3.jar。引入項目後,完美解決!!!
我那個淚流滿面啊!
以下為自己整理的JSONObject以及其依賴包的下載下傳位址: