Вот более простое решение. На стороне Java создайте прослушиватель для каждой кнопки. Он не должен быть каким-либо конкретным классом, так как метод будет искать с помощью отражения:
WebSettings ws = wv.getSettings();
ws.setJavaScriptEnabled(true);
wv.addJavascriptInterface(new Object()
{
public void performClick()
{
// Deal with a click on the OK button
}
}, "ok");
Затем в HTML вызовите его непосредственно из тега кнопки:
<button type="button" onclick="ok.performClick();">OK</button>
Вы ищете io::copy
:
use std::io::{self, prelude::*, SeekFrom};
pub fn assemble<I, O>(mut input: I, mut output: O) -> Result<(), io::Error>
where
I: Read + Seek,
O: Write,
{
// first seek and output "hello"
input.seek(SeekFrom::Start(5))?;
io::copy(&mut input.by_ref().take(5), &mut output)?;
// then output "world"
input.seek(SeekFrom::Start(0))?;
io::copy(&mut input.take(5), &mut output)?;
Ok(())
}
Если вы посмотрите на реализацию io::copy
, вы увидите, что он похож на ваш код. Тем не менее, он заботится о том, чтобы обрабатывать больше ошибок:
write
не всегда записывает все, что вы просите! Он также использует больший размер буфера, но все еще содержит стек.