Интерфейс Javascript, ошибка "Uncaught Error: Ошибка вызова метода в NPObject"
В моем приложении для Android я использую WebAppInterface для перехода от Javascript к Java.
Мой файл.html включает в себя несколько JS, который выполняет "Android.canPlay();" в определенные времена.
В моем приложении функция canPlay () запускает прослушиватель переменных.
Когда срабатывает прослушиватель переменной, если выполняются условия, некоторые файлы переименовываются (временные файлы, которые были загружены с дополнительным расширением.tmp, включая файл.html (так что это файл.html.tmp), вместе с оригинальным файлом.html. Это))
После того, как происходит переименование, веб-представление перезагружается (я пробовал использовать как функцию, так и просто ".loadUrl()" - оба дают ошибки)
Когда приходит время перезагрузить HTML-файл в веб-представлении, я получаю сообщение об ошибке:
E / Web Console ﹕ Uncaught Error: Ошибка вызова метода в NPObject. в файле:////mnt/sdcard/Download/qwerty/playlists/29/2/index.html:206
Строка 206 - это вызов Android.canPlay ().
Вещи, на которые следует обратить внимание - если я не переименую файлы перед перезагрузкой веб-просмотра, а вместо этого переименую их из фоновой службы, которая запускается, у меня нет этой ошибки (хотя я получаю сообщение о запуске чего-либо в WebViewCoreThread)
Некоторый код:
WebAppInterface
public class WebAppInterface {
final Context mContext;
WebAppInterface(Context c) {
mContext = c;
}
@JavascriptInterface
public void canPlay()
{
mPlaylistReady.changeState(true);
}
}
Переменный слушатель (запускается через класс слушателя) (некоторые биты кода удалены, например, общие настройки для расположения файлов)
@Override
public void onStateChange(boolean state) {
if (state) { // true
// this finds all the files and removes the .tmp extension
fileRenamer.removeTmp(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS + "/qwerty/playlists/"));
// reloads the webview
WebViewActivity.this.runOnUiThread(new Runnable() {
public void run() {
webView.loadUrl("file:///" + htmlFile.getAbsolutePath());
}
});
}
}
}
Класс FileRenamer
public class FileRenamer {
public void removeTmp(File directory)
{
File dir = directory;
if(dir.isDirectory()) {
for(File child : dir.listFiles()) {
String name = child.getName();
String ext = name.substring(name.lastIndexOf('.'));
if(ext.equals(".tmp")) {
final int lastPeriodPos = name.lastIndexOf('.');
File renamed = new File(dir, name.substring(0, lastPeriodPos));
child.renameTo(renamed);
}
}
}
}
}
1 ответ
Эта ошибка вызывается JavaScript, потому что во время реализации Java canPlay() произошло исключение.
Попробуйте инкапсулировать метод WebAppInterface.canPlay() в предложении try-catch и зарегистрируйте исключение, чтобы выяснить, что могло произойти.
Кроме того, я пытаюсь найти способ сопоставления исключений в контексте JavaScript, но боюсь, что это невозможно.