天天看點

Android Studio 引入JSONObject 以及其依賴包的那些坑 JAVA

我用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包,那些

Android Studio 引入JSONObject 以及其依賴包的那些坑 JAVA

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以及其依賴包的下載下傳位址:

java json依賴包下載下傳