java.lang.IllegalStateException:尝试 JSONParser 时无法执行 android:onClick 的方法
java.lang.IllegalStateException: Could not execute method for android:onClick when trying JSONParser
我不是开发人员。几周前才开始学习 android。我运行变成了
"java.lang.IllegalStateException Could not execute method for android:onClick"
错误。我已经阅读了类似的问题并尝试了我在这里阅读的不同解决方案,但仍然无法解决。当我尝试 JSONParser parser = new JSONParser() 时,它似乎正在崩溃 - 我想。但我知道 'clickme' 当我点击 android 应用程序上的按钮时触发。
如果有更有经验的人能帮助我,我将不胜感激。
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Thread Policy
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
public void clickme (View view) {
JSONParser parser = new JSONParser();
try {
Object obj = parser.parse(new FileReader("assets/StockDB.json"));
JSONObject jsonObject = (JSONObject) obj;
JSONArray stockInfo = (JSONArray) jsonObject.get("Watchlist");
for (Object c : stockInfo)
{
JSONObject f = (JSONObject) c;
String m = (String) f.get("Company");
String t = (String) f.get("Ticker");
System.out.println(m);
System.out.println(t);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Logcat:
03-03 17:02:12.415:D/AndroidRuntime(22035):正在关闭虚拟机
03-03 17:02:12.425: E/AndroidRuntime(22035): 致命异常: main
03-03 17:02:12.425: E/AndroidRuntime(22035): 过程: com.example.stockiodebug, PID: 22035
03-03 17:02:12.425: E/AndroidRuntime(22035): java.lang.IllegalStateException: 无法执行 android:onClick 的方法
03-03 17:02:12.425: E/AndroidRuntime(22035): 在 android.view.View$DeclaredOnClickListener.onClick(View.java:4740)
03-03 17:02:12.425: E/AndroidRuntime(22035): 在 android.view.View.performClick(View.java:5697)
03-03 17:02:12.425: E/AndroidRuntime(22035): 在 android.widget.TextView.performClick(文本View.java:10815)
03-03 17:02:12.425: E/AndroidRuntime(22035): 在 android.view.View$PerformClick.run(View.java:22526)
03-03 17:02:12.425: E/AndroidRuntime(22035): 在 android.os.Handler.handleCallback(Handler.java:739)
03-03 17:02:12.425: E/AndroidRuntime(22035): 在 android.os.Handler.dispatchMessage(Handler.java:95)
03-03 17:02:12.425: E/AndroidRuntime(22035): 在 android.os.Looper.loop(Looper.java:158)
03-03 17:02:12.425: E/AndroidRuntime(22035): 在 android.app.ActivityThread.main(ActivityThread.java:7229)
03-03 17:02:12.425:E/AndroidRuntime(22035):在 java.lang.reflect.Method.invoke(本机方法)
03-03 17:02:12.425: E/AndroidRuntime(22035): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
03-03 17:02:12.425: E/AndroidRuntime(22035): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
03-03 17:02:12.425: E/AndroidRuntime(22035): 原因: java.lang.reflect.InvocationTargetException
03-03 17:02:12.425:E/AndroidRuntime(22035):在 java.lang.reflect.Method.invoke(本机方法)
03-03 17:02:12.425: E/AndroidRuntime(22035): 在 android.view.View$DeclaredOnClickListener.onClick(View.java:4735)
03-03 17:02:12.425: E/AndroidRuntime(22035): ... 10 更多
03-03 17:02:12.425: E/AndroidRuntime(22035): 原因: java.lang.NoClassDefFoundError: 解析失败: Lorg/json/simple/parser/JSONParser;
03-03 17:02:12.425: E/AndroidRuntime(22035): 在 com.example.stockiodebug.MainActivity.clickme(MainActivity.java:33)
03-03 17:02:12.425: E/AndroidRuntime(22035): ... 12 更多
03-03 17:02:12.425: E/AndroidRuntime(22035): 原因: java.lang.ClassNotFoundException: 在路径上找不到 class "org.json.simple.parser.JSONParser": DexPathList[[zip文件“/data/app/com.example.stockiodebug-2/base.apk”],nativeLibraryDirectories=[/data/app/com.example.stockiodebug-2/lib/arm64,/vendor/lib64,/system/lib64]]
03-03 17:02:12.425: E/AndroidRuntime(22035): 在 dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
03-03 17:02:12.425: E/AndroidRuntime(22035): 在 java.lang.ClassLoader.loadClass(ClassLoader.java:511)
03-03 17:02:12.425: E/AndroidRuntime(22035): 在 java.lang.ClassLoader.loadClass(ClassLoader.java:469)
03-03 17:02:12.425: E/AndroidRuntime(22035): ... 13 更多
03-03 17:02:12.425: E/AndroidRuntime(22035): 抑制: java.lang.ClassNotFoundException: org.json.simple.parser.JSONParser
03-03 17:02:12.425:E/AndroidRuntime(22035):在 java.lang.Class.classForName(本机方法)
03-03 17:02:12.425: E/AndroidRuntime(22035): 在 java.lang.BootClassLoader.findClass(ClassLoader.java:781)
03-03 17:02:12.425: E/AndroidRuntime(22035): 在 java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
03-03 17:02:12.425: E/AndroidRuntime(22035): 在 java.lang.ClassLoader.loadClass(ClassLoader.java:504)
03-03 17:02:12.425: E/AndroidRuntime(22035): ... 14 更多
03-03 17:02:12.425: E/AndroidRuntime(22035): 原因: java.lang.NoClassDefFoundError: Class 使用引导 class 加载程序未找到;没有可用的堆栈跟踪
出现此错误是因为它抛出 ClassNotFoundException
,在异常链中产生 IllegalStateException
。
在您的代码中 org.json.simple.parser.JSONParser
未找到。
尝试实现 JsonParser 库。
转到项目的 "libs" 目录并确保 org.json.simple.parser.JSONParser 相关的 .jar 放在那里。当 JVM 在 class 路径中找不到所需的 class 时,就会出现这样的错误。
我不是开发人员。几周前才开始学习 android。我运行变成了
"java.lang.IllegalStateException Could not execute method for android:onClick" 错误。我已经阅读了类似的问题并尝试了我在这里阅读的不同解决方案,但仍然无法解决。当我尝试 JSONParser parser = new JSONParser() 时,它似乎正在崩溃 - 我想。但我知道 'clickme' 当我点击 android 应用程序上的按钮时触发。
如果有更有经验的人能帮助我,我将不胜感激。
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Thread Policy
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
public void clickme (View view) {
JSONParser parser = new JSONParser();
try {
Object obj = parser.parse(new FileReader("assets/StockDB.json"));
JSONObject jsonObject = (JSONObject) obj;
JSONArray stockInfo = (JSONArray) jsonObject.get("Watchlist");
for (Object c : stockInfo)
{
JSONObject f = (JSONObject) c;
String m = (String) f.get("Company");
String t = (String) f.get("Ticker");
System.out.println(m);
System.out.println(t);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Logcat:
03-03 17:02:12.415:D/AndroidRuntime(22035):正在关闭虚拟机 03-03 17:02:12.425: E/AndroidRuntime(22035): 致命异常: main 03-03 17:02:12.425: E/AndroidRuntime(22035): 过程: com.example.stockiodebug, PID: 22035 03-03 17:02:12.425: E/AndroidRuntime(22035): java.lang.IllegalStateException: 无法执行 android:onClick 的方法 03-03 17:02:12.425: E/AndroidRuntime(22035): 在 android.view.View$DeclaredOnClickListener.onClick(View.java:4740) 03-03 17:02:12.425: E/AndroidRuntime(22035): 在 android.view.View.performClick(View.java:5697) 03-03 17:02:12.425: E/AndroidRuntime(22035): 在 android.widget.TextView.performClick(文本View.java:10815) 03-03 17:02:12.425: E/AndroidRuntime(22035): 在 android.view.View$PerformClick.run(View.java:22526) 03-03 17:02:12.425: E/AndroidRuntime(22035): 在 android.os.Handler.handleCallback(Handler.java:739) 03-03 17:02:12.425: E/AndroidRuntime(22035): 在 android.os.Handler.dispatchMessage(Handler.java:95) 03-03 17:02:12.425: E/AndroidRuntime(22035): 在 android.os.Looper.loop(Looper.java:158) 03-03 17:02:12.425: E/AndroidRuntime(22035): 在 android.app.ActivityThread.main(ActivityThread.java:7229) 03-03 17:02:12.425:E/AndroidRuntime(22035):在 java.lang.reflect.Method.invoke(本机方法) 03-03 17:02:12.425: E/AndroidRuntime(22035): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 03-03 17:02:12.425: E/AndroidRuntime(22035): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 03-03 17:02:12.425: E/AndroidRuntime(22035): 原因: java.lang.reflect.InvocationTargetException 03-03 17:02:12.425:E/AndroidRuntime(22035):在 java.lang.reflect.Method.invoke(本机方法) 03-03 17:02:12.425: E/AndroidRuntime(22035): 在 android.view.View$DeclaredOnClickListener.onClick(View.java:4735) 03-03 17:02:12.425: E/AndroidRuntime(22035): ... 10 更多 03-03 17:02:12.425: E/AndroidRuntime(22035): 原因: java.lang.NoClassDefFoundError: 解析失败: Lorg/json/simple/parser/JSONParser; 03-03 17:02:12.425: E/AndroidRuntime(22035): 在 com.example.stockiodebug.MainActivity.clickme(MainActivity.java:33) 03-03 17:02:12.425: E/AndroidRuntime(22035): ... 12 更多 03-03 17:02:12.425: E/AndroidRuntime(22035): 原因: java.lang.ClassNotFoundException: 在路径上找不到 class "org.json.simple.parser.JSONParser": DexPathList[[zip文件“/data/app/com.example.stockiodebug-2/base.apk”],nativeLibraryDirectories=[/data/app/com.example.stockiodebug-2/lib/arm64,/vendor/lib64,/system/lib64]] 03-03 17:02:12.425: E/AndroidRuntime(22035): 在 dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 03-03 17:02:12.425: E/AndroidRuntime(22035): 在 java.lang.ClassLoader.loadClass(ClassLoader.java:511) 03-03 17:02:12.425: E/AndroidRuntime(22035): 在 java.lang.ClassLoader.loadClass(ClassLoader.java:469) 03-03 17:02:12.425: E/AndroidRuntime(22035): ... 13 更多 03-03 17:02:12.425: E/AndroidRuntime(22035): 抑制: java.lang.ClassNotFoundException: org.json.simple.parser.JSONParser 03-03 17:02:12.425:E/AndroidRuntime(22035):在 java.lang.Class.classForName(本机方法) 03-03 17:02:12.425: E/AndroidRuntime(22035): 在 java.lang.BootClassLoader.findClass(ClassLoader.java:781) 03-03 17:02:12.425: E/AndroidRuntime(22035): 在 java.lang.BootClassLoader.loadClass(ClassLoader.java:841) 03-03 17:02:12.425: E/AndroidRuntime(22035): 在 java.lang.ClassLoader.loadClass(ClassLoader.java:504) 03-03 17:02:12.425: E/AndroidRuntime(22035): ... 14 更多 03-03 17:02:12.425: E/AndroidRuntime(22035): 原因: java.lang.NoClassDefFoundError: Class 使用引导 class 加载程序未找到;没有可用的堆栈跟踪
出现此错误是因为它抛出 ClassNotFoundException
,在异常链中产生 IllegalStateException
。
在您的代码中 org.json.simple.parser.JSONParser
未找到。
尝试实现 JsonParser 库。
转到项目的 "libs" 目录并确保 org.json.simple.parser.JSONParser 相关的 .jar 放在那里。当 JVM 在 class 路径中找不到所需的 class 时,就会出现这样的错误。