主线程等待websocket执行结果后返回数据
使用锁lock实现
//主线程调用方法,加入lock条件锁
public Object sendText(Object obj){
Object lock = new Object();
Object result = this.sendMethod(obj,lock);
synchronized (lock){
try {
//主线程等待lock释放锁
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return result;
}
websocket主方法实现
//调用websocket的方法 websocket实现省略
public Object sendMethod(Object obj,Object lock){
Object result;
try {
//方法调用 构造监听类
Method.send(obj, new AbstractTtsWebSocketListener() {
@Override
public void onSuccess(byte[] bytes) {
//业务处理
//释放锁
synchronized (lock) {
lock.notifyAll();
}
}
/**
* websocket返回失败时,需要用户重写的方法
*
* @param webSocket
* @param t
* @param response
*/
@Override
public void onFail(WebSocket webSocket, Throwable t, Response response) {
//业务处理
//释放锁
synchronized (lock) {
lock.notifyAll();
}
}
/**
* 发生业务失败的情况,需要用户重写的方法
*
* @param webSocket
* @param response
*/
@Override
public void onBusinessFail(WebSocket webSocket, TtsResponse response) {
//业务处理
//释放锁
synchronized (lock) {
lock.notifyAll();
}
}
});
}catch (Exception exception){
//释放锁
synchronized (lock) {
lock.notifyAll();
}
}
return result;
}