代码如下,先会去执行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 の処理を Callback に渡すことをお勧めします。 。 または、次のように書いて setHeaderUrl(headerUrl) を呼び出して headerUrl~~
を渡すだけです