代码如下,先会去执行returnUrl,等到第二次调用getHeadUrl该方法才会去到onResponse返回数据。
public static String getHeadUrl(long userid) {
final String url = ServiceResponseURL.GetLogoUrl(userid);
OkHttpUtils.get().url(url).build().execute(new StringCallback() {
@Override
public void onError(Call call, Exception e, int id) {
returnUrl = null;
}
@Override
public void onResponse(String response, int id) {
JSONObject all = JSON.parseObject(response);
returnUrl = all.getString("imageUrl");
}
});
return returnUrl;
}
高洛峰2017-04-17 17:48:45
데이터를 내보내려면 동기화를 직접 사용하세요.
execute()에는 콜백 매개변수가 없으며, .execute() 메서드가 종료된 후 반환 결과가 직접 생성됩니다.
으아악문서 GitHub를 잘 살펴보세요
PHPz2017-04-17 17:48:45
답변은 위에 3가지 정도 있습니다.
동기 차단 방식을 사용하여 반환 값을 직접 가져옵니다.
비동기식에서 동기식으로 메시지가 콜백으로 전송되고 다른 스레드에서 처리됩니다.
비동기 처리는 콜백에서 직접 수행됩니다.
무엇을 하느냐에 따라 다릅니다. .
ringa_lee2017-04-17 17:48:45
= =~분명히 콜백 함수가 실행되기 전에 반환을 하셨군요... 외부에 새 StringCallback을 작성하고 headerUrl 처리를 콜백에 넘기는 것이 좋습니다. . 아니면 이렇게 작성하고 setHeaderUrl(headerUrl)을 호출하여 headerUrl을 전달하세요~~