【问题标题】:NoMethodError on standard Android runtime object标准 Android 运行时对象上的 NoMethodError
【发布时间】:2010-08-25 14:08:15
【问题描述】:

嘿,我遇到了一个非常奇怪的错误,当我尝试在从 1.5 到 2.2 的所有 Android 平台(手机和模拟器上)将对象序列化为 JSON 时,我无法解决。

我收到此错误:

E/AndroidRuntime(21017): Uncaught handler: thread AsyncTask #2 exiting due to uncaught exception
E/AndroidRuntime(21017): java.lang.RuntimeException: An error occured while executing doInBackground()
E/AndroidRuntime(21017):    at android.os.AsyncTask$3.done(AsyncTask.java:200)
E/AndroidRuntime(21017):    at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
E/AndroidRuntime(21017):    at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
E/AndroidRuntime(21017):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
E/AndroidRuntime(21017):    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
E/AndroidRuntime(21017):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
E/AndroidRuntime(21017):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
E/AndroidRuntime(21017):    at java.lang.Thread.run(Thread.java:1096)
E/AndroidRuntime(21017): Caused by: java.lang.NoSuchMethodError: org.json.JSONStringer.object
E/AndroidRuntime(21017):    at com.qype.radar.api.json.JsonSerializationHelper.startModel(JsonSerializationHelper.java:119)
E/AndroidRuntime(21017):    at com.qype.radar.api.json.JsonSerializationHelper.serializeCheckin(JsonSerializationHelper.java:94)
E/AndroidRuntime(21017):    at com.qype.radar.api.QypeApiImpl.submitCheckin(QypeApiImpl.java:157)
E/AndroidRuntime(21017):    at com.qype.radar.activities.tasks.SubmitCheckinTask.doCheckedInBackground(SubmitCheckinTask.java:29)
E/AndroidRuntime(21017):    at com.qype.radar.activities.tasks.SubmitCheckinTask.doCheckedInBackground(SubmitCheckinTask.java:1)
E/AndroidRuntime(21017):    at com.github.droidfu.concurrent.BetterAsyncTask.doInBackground(BetterAsyncTask.java:154)
E/AndroidRuntime(21017):    at android.os.AsyncTask$2.call(AsyncTask.java:185)
E/AndroidRuntime(21017):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
E/AndroidRuntime(21017):    ... 4 more

在此代码中序列化评论时,当从“startModel()”到达“stringer.object”行时:

package com.qype.radar.api.json;

import org.json.JSONException;
import org.json.JSONStringer;

import com.qype.radar.model.Review;

public class JsonSerializationHelper {

    private JSONStringer stringer = new JSONStringer();

    ...

    public String serializeReview(Review review) throws JSONException {

        startModel("review");

        value("rating", review.getRating());
        value("language", review.getLanguage());
        value("content", review.getText());

        return endModel();
    }

    ...

    private JSONStringer startModel(String name) throws JSONException {
        stringer.object();
        stringer.key(name);
        stringer.object();
        return stringer;
    }

    private String endModel() throws JSONException {
        stringer.endObject();
        stringer.endObject();
        return stringer.toString();
    }

    private void value(String key, String value) throws JSONException {
        stringer.key(key);
        stringer.value(value);
    }

    private void value(String key, int value) throws JSONException {
        stringer.key(key);
        stringer.value(value);
    }
}

最奇怪的是代码编译得很好,并且在调试时,JSONStringer 对象被实例化了,但是对它的任何调用都会抛出这个错误。我也能够通过Java的反射发现这个类确实存在,并且我可以从类对象中检索到的方法都在那里,并且可以毫无错误地调用。

org.json 包是 Android 中的一个标准,从 API 版本 1 开始提供。

任何解决此问题的帮助将不胜感激,因为我根本不知道去哪里找。

【问题讨论】:

  • 只是为了增加混乱:有趣的是使用org.json 类的反序列化工作正常......这些错误只是在序列化 对象。

标签: android json nosuchmethoderror


【解决方案1】:

原来是来自 Maven Central 的 Android JAR 存在问题。它依赖于 JSON JAR,但在 Maven Central 上被破坏了(JSONStringer 类为空,仅定义了一个 toString() 方法)。

如果您也在使用 Maven,则可以通过使用 maven-android-sdk-deployer 部署 SDK 的 android jar 并从那里开始来解决此问题。

this thread

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 2012-04-23
    • 1970-01-01
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多