VerifyError при чтении ini
Я использую ini4j, так как я предпочитаю inis windoze. Эта часть гарантирует, что файл существует:
File INI_FILE = new File(getActivity().getFilesDir().getAbsolutePath()+File.separator+"config.ini");
final String INI = getActivity().getFilesDir().getAbsolutePath()+File.separator+"config.ini";
if(!GetProp.Supports(INI_FILE)){
File INI_F = new File(getActivity().getFilesDir().getAbsolutePath()+File.separator+"config.ini");
if (!INI_F.exists()) {
try {
INI_F.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
Wini ini = null;
try {
ini = new Wini(new File(INI));
} catch (InvalidFileFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ini.put("Throttle", "refresh_interval", 1000);
ini.put("Throttle", "active", false);
ini.put("Throttle", "temp_limit", 80);
try {
ini.store();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Вот как я пытаюсь это прочитать: (ЭТОТ КОД ПОД ONClick())
Wini ini = null;
try {
ini = new Wini(new File(INI));
} catch (InvalidFileFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int refresh_interval = ini.get("Throttle", "refresh_interval", int.class); // ERROR HERE
boolean active = ini.get("Throttle", "active", boolean.class);
int max_temp = ini.get("Throttle", "temp_limit", int.class);
Я получаю следующую ошибку:
E/AndroidRuntime(12340): FATAL EXCEPTION: main
E/AndroidRuntime(12340): java.lang.VerifyError: org/ini4j/spi/BeanTool
E/AndroidRuntime(12340): at org.ini4j.BasicOptionMap.get(BasicOptionMap.java:161)
E/AndroidRuntime(12340): at org.ini4j.BasicProfile.get(BasicProfile.java:129)
E/AndroidRuntime(12340): at com.costinutz32.hox_control.fragments.CPU$6.onClick(CPU.java:622)
E/AndroidRuntime(12340): at android.view.View.performClick(View.java)
E/AndroidRuntime(12340): at android.view.View$PerformClick.run(View.java)
E/AndroidRuntime(12340): at android.os.Handler.handleCallback(Handler.java)
E/AndroidRuntime(12340): at android.os.Handler.dispatchMessage(Handler.java)
E/AndroidRuntime(12340): at android.os.Looper.loop(Looper.java)
E/AndroidRuntime(12340): at android.app.ActivityThread.main(ActivityThread.java)
E/AndroidRuntime(12340): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(12340): at java.lang.reflect.Method.invoke(Method.java)
E/AndroidRuntime(12340): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java)
E/AndroidRuntime(12340): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java)
E/AndroidRuntime(12340): at dalvik.system.NativeStart.main(Native Method)
Я искал все исправления в Интернете, пытался повторно импортировать фляги, исправлять пути сборки, чистить проекты и все, что мог найти. Ничего не помогло
Если есть что-то, что я забыл упомянуть, дайте мне знать, чтобы я мог добавить это. При необходимости я могу добавить скриншоты настроек моего проекта.
Спасибо!
Изменить: Вот экран с полными журналами: http://img823.imageshack.us/img823/7144/54gx.png
2 ответа
Библиотека, которую вы пытаетесь использовать, похоже, сильно зависит от java.beans
отражение. Тем не менее, на Android только части java.beans
Пакет доступны.
VerifyError
Это связано с отсутствием классов, полей и методов во время загрузки классов.
Либо перенесите библиотеку на Android самостоятельно, либо откажитесь от нее в пользу механизмов и библиотек, которые легко доступны на Android.
Я столкнулся с той же проблемой в проекте Android и обнаружил, что удаление int.class и преобразование строки в целое число, похоже, работает.
+ Изменить
int refresh_interval = ini.get("Throttle", "refresh_interval", int.class);
в
int refresh_interval = Integer.parseInt(ini.get("Throttle", "refresh_interval"));
и это должно работать.