【问题标题】:JSON Serializer AndroidJSON 序列化器 Android
【发布时间】:2013-01-14 23:06:27
【问题描述】:

我将 JSONLib 2.4 用于 JSONSerializer() 方法。每次我开始活动时,它都会强制关闭。我尝试抛出 JSONException,但它给了我一个错误。怎么了?这是电话:

JSONObject json = (JSONObject) JSONSerializer.toJSON(jsonTxt);

这是我的 LogCat 输出:

01-14 17:29:24.825: W/dalvikvm(13265): 无法解析 Lnet/sf/json/JSONException 的超类; (1034) 01-14 17:29:24.825: W/dalvikvm(13265): 类 'Lnet/sf/json/JSONException;' 的链接失败的 01-14 17:29:24.825: W/dalvikvm(13265): VFY: 无法解析异常类 813 (Lnet/sf/json/JSONException;) 01-14 17:29:24.825: W/dalvikvm(13265): VFY: 无法在地址 0x2e 找到异常处理程序 01-14 17:29:24.825: W/dalvikvm(13265): VFY: 拒绝 Lnet/sf/json/JSONSerializer;.toJSON (Ljava/lang/Object;Lnet/sf/json/JsonConfig;)Lnet/sf/json /JSON; 01-14 17:29:24.825: W/dalvikvm(13265): VFY: 在 0x002e 拒绝操作码 0x0d 01-14 17:29:24.825: W/dalvikvm(13265): VFY: 拒绝 Lnet/sf/json/JSONSerializer;.toJSON (Ljava/lang/Object;Lnet/sf/json/JsonConfig;)Lnet/sf/json /JSON; 01-14 17:29:24.825: W/dalvikvm(13265): 验证器拒绝类 Lnet/sf/json/JSONSerializer; 01-14 17:29:24.856: W/dalvikvm(13265): threadid=11: 线程以未捕获的异常退出 (group=0x41b28930) 01-14 17:29:24.872:E/AndroidRuntime(13265):致命异常:AsyncTask #1 01-14 17:29:24.872: E/AndroidRuntime(13265): java.lang.RuntimeException: 执行 doInBackground() 时出错 01-14 17:29:24.872: E/AndroidRuntime(13265): 在 android.os.AsyncTask$3.done(AsyncTask.java:299) 01-14 17:29:24.872: E/AndroidRuntime(13265): 在 java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352) 01-14 17:29:24.872: E/AndroidRuntime(13265): 在 java.util.concurrent.FutureTask.setException(FutureTask.java:219) 01-14 17:29:24.872: E/AndroidRuntime(13265): 在 java.util.concurrent.FutureTask.run(FutureTask.java:239) 01-14 17:29:24.872: E/AndroidRuntime(13265): 在 android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 01-14 17:29:24.872: E/AndroidRuntime(13265): 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 01-14 17:29:24.872: E/AndroidRuntime(13265): 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 01-14 17:29:24.872: E/AndroidRuntime(13265): 在 java.lang.Thread.run(Thread.java:856) 01-14 17:29:24.872: E/AndroidRuntime(13265): 引起: java.lang.VerifyError: net/sf/json/JSONSerializer 01-14 17:29:24.872: E/AndroidRuntime(13265): 在 com.aer.illbehonest.VideoPlay$ShowTitlesTask.doInBackground(VideoPlay.java:63) 01-14 17:29:24.872: E/AndroidRuntime(13265): 在 com.aer.illbehonest.VideoPlay$ShowTitlesTask.doInBackground(VideoPlay.java:1) 01-14 17:29:24.872: E/AndroidRuntime(13265): 在 android.os.AsyncTask$2.call(AsyncTask.java:287) 01-14 17:29:24.872: E/AndroidRuntime(13265): 在 java.util.concurrent.FutureTask.run(FutureTask.java:234) 01-14 17:29:24.872: E/AndroidRuntime(13265): ... 4 更多

【问题讨论】:

  • jsonTxt 的值是多少?

标签: android jsonserializer json-lib


【解决方案1】:

答案在 logcat 的第一行。

Unable to resolve superclass of Lnet/sf/json/JSONException

如果您查看javadoc for JSONException,它会显示类层次结构。您可以在 JSONException 上方看到 org.apache.commons.lang.exception.NestableRuntimeException,这意味着 NestableRuntimeException 是 JSONException 的超类,因此您需要在项目中包含 NestableRuntimeException 才能使 JSONException 正常工作。

与你在项目中添加 JsonLib 的方式相同,你还应该添加 JsonLib 的依赖项。根据 mvnrepository,json-lib 2.4 依赖于相当多的视图库,commons-lang 2.5 就是其中之一。您可以看到它们由 mvnrepository here 报告。您还可以在 json-lib 项目页面here 上看到它们。

对于看起来有大量依赖项并且会使您的 apk 更大的移动应用程序。我没有使用过 json-lib,但我可能会建议使用更独立的东西,例如 gson (download)。

【讨论】:

  • 请不要认为我是个白痴,但你能给我举个例子来说明你的意思吗?我还是 Java 的初学者。
  • 每个人在某些时候都是初学者。我更新了答案,希望对您有所帮助。
  • 我这样做了,但我仍然遇到同样的问题。
  • 它不会让我把它放在 try/catch... 这不是我应该做的吗?
  • 好的,再次更新了有关版本和备用 json 库的更多信息。您也可以使用 Jackson,这是我首选的 json 库,但它也比 gson 大。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-18
  • 2012-04-16
相关资源
最近更新 更多