光阴似箭催人老,日月如移越少年。
まず第一に、ネットワークにアクセスするために非同期リクエストを使用しているため、呼び出し時に値を同期的に取得することは不可能です。 OKHTTP のネットワークへの同期アクセスを使用し、ネットワーク アクセスが完了した後に値を返すことで正しい値を取得できるようにするか、値の非同期取得を自分で制御する (ネットワーク リクエストが完了した後に値を取得するなど) ことができます。完了、つまり応答後に操作を開始します。
ここでは内部クラスを直接記述せず、現在のクラスにインターフェイスを継承させ、オーバーライドされたメソッドで現在のクラスの変数に値を代入します。これは私のアイデアです
getAsyn メソッドは名前からわかるように非同期メソッドであるため、getUrl は応答を受け取る前に返されるため、応答内の値を取得できません。解決策は 2 つあります:
getAsyn
getUrl
同期方法がある場合は OkHttpClientManager を参照
OkHttpClientManager
非同期メソッドを使用する必要がある場合は、getUrl で非同期リクエストを送信し、parseJson に値が入るまでスリープまたはループで待機してから返すことができます。これは実際には、非同期を偽装して同期に変えます。
parseJson
個人的には、フロア 1 の言ったことは非常に正しいと思います
まず第一に、ネットワークにアクセスするために非同期リクエストを使用しているため、呼び出し時に値を同期的に取得することは不可能です。 OKHTTP のネットワークへの同期アクセスを使用し、ネットワーク アクセスが完了した後に値を返すことで正しい値を取得できるようにするか、値の非同期取得を自分で制御する (ネットワーク リクエストが完了した後に値を取得するなど) ことができます。完了、つまり応答後に操作を開始します。
ここでは内部クラスを直接記述せず、現在のクラスにインターフェイスを継承させ、オーバーライドされたメソッドで現在のクラスの変数に値を代入します。これは私のアイデアです
getAsyn
メソッドは名前からわかるように非同期メソッドであるため、getUrl
は応答を受け取る前に返されるため、応答内の値を取得できません。解決策は 2 つあります:同期方法がある場合は
OkHttpClientManager
を参照非同期メソッドを使用する必要がある場合は、
getUrl
で非同期リクエストを送信し、parseJson
に値が入るまでスリープまたはループで待機してから返すことができます。これは実際には、非同期を偽装して同期に変えます。個人的には、フロア 1 の言ったことは非常に正しいと思います