代码如下,先会去执行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;
}
으아악
처리하세요.Callback
밖으로 던져보세요. 또는Response
을 직접 받아데이터를 내보내려면 동기화를 직접 사용하세요.
execute()에는 콜백 매개변수가 없으며, .execute() 메서드가 종료된 후 반환 결과가 직접 생성됩니다.
으아악문서 GitHub를 잘 살펴보세요
답변은 위에 3가지 정도 있습니다.
동기 차단 방식을 사용하여 반환 값을 직접 가져옵니다.
비동기식에서 동기식으로 메시지가 콜백으로 전송되고 다른 스레드에서 처리됩니다.
비동기 처리는 콜백에서 직접 수행됩니다.
무엇을 하느냐에 따라 다릅니다. .
= =~분명히 콜백 함수가 실행되기 전에 반환을 하셨군요... 외부에 새 StringCallback을 작성하고 headerUrl 처리를 콜백에 넘기는 것이 좋습니다. . 아니면 이렇게 작성하고 setHeaderUrl(headerUrl)을 호출하여 headerUrl을 전달하세요~~