我遇到了一个用Android Studio开发的小安卓应用程序的问题。我想做的就是在按钮单击例程中使用org.json.XML从xml字符串中获取JSON。 但不幸的是,应用程序在调试模式下崩溃而没有错误,当我正常运行应用程序时,它会生成以下错误消息:
--------- beginning of crash
E / AndroidRuntime:致命异常:主要 处理:com.example.drudo.anothertestapp,PID:3068 java.lang.IllegalStateException:无法执行android:onClick的方法 在android.support.v7.app.AppCompatViewInflater $ DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293) 在android.view.View.performClick(View.java:5198) 在android.view.View $ PerformClick.run(View.java:21147) 在android.os.Handler.handleCallback(Handler.java:739) 在android.os.Handler.dispatchMessage(Handler.java:95) 在android.os.Looper.loop(Looper.java:148) 在android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 引起:java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invoke(Native Method) 在android.support.v7.app.AppCompatViewInflater $ DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 在android.view.View.performClick(View.java:5198) 在android.view.View $ PerformClick.run(View.java:21147) 在android.os.Handler.handleCallback(Handler.java:739) 在android.os.Handler.dispatchMessage(Handler.java:95) 在android.os.Looper.loop(Looper.java:148) 在android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 引起:java.lang.NoSuchMethodError:没有静态方法stringToValue(Ljava / lang / String;)Ljava / lang / Object;在类Lorg / json / JSONObject中;或其超类('org.json.JSONObject'的声明出现在/system/framework/core-libart.jar中) 在org.json.XML.parse(XML.java:257) 在org.json.XML.parse(XML.java:263) 在org.json.XML.toJSONObject(XML.java:302) 在com.example.drudo.anothertestapp.MainActivity.onButtonClick(MainActivity.java:28) at java.lang.reflect.Method.invoke(Native Method) 在android.support.v7.app.AppCompatViewInflater $ DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 在android.view.View.performClick(View.java:5198) 在android.view.View $ PerformClick.run(View.java:21147) 在android.os.Handler.handleCallback(Handler.java:739) 在android.os.Handler.dispatchMessage(Handler.java:95) 在android.os.Looper.loop(Looper.java:148) 在android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) W / art:暂停所有线程:8.734ms I /处理:发送信号。 PID:3068 SIG:9 申请已终止。
onButtonClick代码:
public void onButtonClick(View view)
{
String XML_TESTSTRING = "<item><value>test</value></item>";
JSONObject jsonObject = null;
try
{
jsonObject = XML.toJSONObject(XML_TESTSTRING);//here crash
}
catch (JSONException e)
{
e.printStackTrace();
}
}
我在项目中包含的json库如下:https://mvnrepository.com/artifact/org.json/json/1.5-20090211
我在app中创建了一个libs目录,将jar复制到它并右键单击“Add as Library”。我在build.gradle中的依赖项部分如下所示:
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.google.android.gms:play-services-appindexing:8.1.0'
compile files('libs/json-1.5-20090211.jar')
}
我最好的猜测是问题是关于Android api包含org.json以及我下载和包含的那个,但我不知道如何继续。有什么建议吗?
答案 0 :(得分:0)
Android框架的org.json与我们在外部添加的存储库org.json之间存在冲突。 Android在XML类中没有必需的toJsonObject(testString)方法。
使用此开源
https://github.com/stleary/JSON-java,您应该重构此软件包并继续。
有关开发者的更多详细信息,请参见https://github.com/stleary/JSON-java/wiki/JSON-Java-for-Android-developers。
我尝试过了,这很完美。