Эта проблема очень распространена, когда вы пытаетесь использовать переменную, к которой нужно обращаться из другого класса! Иногда вы не замечаете, когда это произойдет, например, для использования threadPool на cordova потребуется внутренний класс:
String password = "qweqwe";
String config = "MyObject";
cordova.getThreadPool().execute(new Runnable() { // we are executing a nested class !
public void run() {
try {
Session session = new Session();
session.setConfig(config);
session.setPassword(password);
} catch (Exception e) {
error(e.getMessage().toString());
e.printStackTrace();
}
}
});
Предыдущий код выдаст исключение, потому что вы получаете доступ к config и паролю, а это не финальная переменная.
Эту проблему можно легко исправить, объявив переменную с проблемой как окончательной.
// Note that you can declare final any kind of variable like objects, classes, numbers etc ...
final String password = "qweqwe";
final String config = "MyObject";
cordova.getThreadPool().execute(new Runnable() { // we are executing a nested class !
public void run() {
try {
Session session = new Session();
session.setConfig(config);
session.setPassword(password);
} catch (Exception e) {
error(e.getMessage().toString());
e.printStackTrace();
}
}
});
Хотя решение простое, но если вы не знаете, как его решить, иногда это может быть очень головной болью.