У меня есть реализация, как показано ниже, она возвращает js, созданный на ходу, в метод webview shouldInterceptRequest, но мне нужно сделать запросы int it и дождаться ответа, прежде чем возвращать inputStream. Как я могу заставить его ждать этого.Как использовать новый поток в методе синхронизации
Я могу подготовить и синхронизировать запрос для этого, и он решает проблему, но я просто задаюсь вопросом, есть ли способ сделать это с помощью новой темы.
MRURLProtocol.mapDomain("gamification.fs", new MRProtocolResponseHandler() {
@Override
public InputStream handle(Uri uri) {
InputStream stream = null;
myApplication.getChamp().getImpulser().invokeRequest(method, body,new OnWebApiResponseArrived() {
@Override
public void OnSuccess(Object obj) {
String configString = "(function() { if (typeof(window) === 'undefined') ..... %s ....";
configString = String.format(configString, obj);
stream = new ByteArrayInputStream(configString.getBytes());
}
@Override
public void OnFail(String errMsg) {
String configString = "(function() { if (typeof(window) === 'undefined')..... %s ....";
configString = String.format(configString, errMsg);
stream = new ByteArrayInputStream(configString.getBytes());
}
});
// NEED TO WAIT FOR stream before return
return stream;
}
});
запрос Invoke (чтобы показать, что она работает на новом потоке)
public void invokeRequest(String entryPoint,String body,final OnWebApiResponseArrived callback){
GameApiRequest request = new GameApiRequest();
request.setEntryPoint(entryPoint);
request.setBody(body);
request.setUIResponseHandler(new Handler(){
@Override
public void handleMessage(Message msg) {
if(msg.obj != null){
if(msg.what == MCStatics.ResponseMessageCode)
callback.OnSuccess(msg.obj);
else
callback.OnFail("please,try again later.");
}
}
}
});
Thread thread = new Thread(request);
thread.start();
}