JSONObject NoSuchMethodException- Init

时间:2015-06-15 21:39:19

标签: java android jsonobject nosuchmethod

我使用反射来编写一个类,该类将从JSONArray jArr的元素创建对象(其类型我作为参数Base传递),并将它们添加到ArrayList objectList。一切都很顺利,直到我完成这一步:

for(int i = 0; i < jArr.length(); i++) {
        objectList.add(Base.getConstructor(new Class[]{JSONObject.class}).newInstance(jArr.getJSONObject(i)));
    }

在运行时我收到以下错误:

java.lang.NoSuchMethodException: <init> [class org.json.JSONObject]

从我从Google收集到的内容中,当您尝试使用不正确的参数调用构造函数时,会出现此错误,但我不确定为什么会在此处应用。

编辑:根据要求,这是完整错误:

06-15 18:35:55.245 1919-1919 / com.example.ben.phptest W / System.err:java.lang.NoSuchMethodException:[class org.json.JSONObject]
06-15 18:35:55.245 1919-1919 / com.example.ben.phptest W / System.err:at java.lang.Class.getConstructorOrMethod(Class.java:472)
06-15 18:35:55.255 1919-1919 / com.example.ben.phptest W / System.err:at java.lang.Class.getConstructor(Class.java:446)
06-15 18:35:55.255 1919-1919 / com.example.ben.phptest W / System.err:at com.example.ben.phptest.PHPList。(PHPList.java:58)
06-15 18:35:55.255 1919-1919 / com.example.ben.phptest W / System.err:at com.example.ben.phptest.MainActivity.onCreate(MainActivity.java:35)
06-15 18:35:55.255 1919-1919 / com.example.ben.phptest W / System.err:at android.app.Activity.performCreate(Activity.java:5231)
06-15 18:35:55.255 1919-1919 / com.example.ben.phptest W / System.err:at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
06-15 18:35:55.255 1919-1919 / com.example.ben.phptest W / System.err:at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
06-15 18:35:55.255 1919-1919 / com.example.ben.phptest W / System.err:at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
06-15 18:35:55.255 1919-1919 / com.example.ben.phptest W / System.err:at android.app.ActivityThread.access $ 800(ActivityThread.java:135)
06-15 18:35:55.255 1919-1919 / com.example.ben.phptest W / System.err:at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1196)
06-15 18:35:55.265 1919-1919 / com.example.ben.phptest W / System.err:at android.os.Handler.dispatchMessage(Handler.java:102)
06-15 18:35:55.265 1919-1919 / com.example.ben.phptest W / System.err:at android.os.Looper.loop(Looper.java:136)
06-15 18:35:55.265 1919-1919 / com.example.ben.phptest W / System.err:在android.app.ActivityThread.main(ActivityThread.java:5017)
06-15 18:35:55.265 1919-1919 / com.example.ben.phptest W / System.err:at java.lang.reflect.Method.invokeNative(Native Method)
06-15 18:35:55.265 1919-1919 / com.example.ben.phptest W / System.err:at java.lang.reflect.Method.invoke(Method.java:515)
06-15 18:35:55.265 1919-1919 / com.example.ben.phptest W / System.err:at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:779)
06-15 18:35:55.265 1919-1919 / com.example.ben.phptest W / System.err:at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
06-15 18:35:55.265 1919-1919 / com.example.ben.phptest W / System.err:at dalvik.system.NativeStart.main(Native Method)

(第58行是上面循环的核心)

作为旁注,我传递的类绝对接受JSONObject作为唯一的构造函数参数:

Person(JSONObject obj) throws JSONException

2 个答案:

答案 0 :(得分:0)

如果我理解正确,你有一个正在添加的对象列表,你通过在jArr中反复调用JSONObject上的构造函数来实现这一点。 NoSuchMethodException是一个运行时异常,当您尝试在运行时调用某个方法时,该方法不存在,或者您的方法签名错误。我最好的猜测是你试图调用的构造函数没有采用JSONObject类型的参数。 newInstance方法应该使用与构造函数相同的参数列表。

答案 1 :(得分:0)

我认为您已经回答了自己的问题。没有JSONObject构造函数只需要JSONObject。错误正是这么说的。

为什么不将代码更改为:

for (int i = 0; i < jArr.length(); i++) {
        objectList.add(jArr.getJSONObject(i));
}