そのため、現在、BasicHttpClient を呼び出してインターネットから Http 応答を取得する非同期呼び出しを実装しようとしています。Http クライアントが作業を完了すると、Callee クラスのメソッドの 1 つが呼び出されます。
一般的に、私の実装は次のようになります。
public class BasicHttpClientAsync {
private OnRequestFinishedListener mListener;
public interface OnRequestFinishedListener {
public void onRequestFinished(HttpResponse httpResponse);
public void onRequestFinished(ClientProtocolException e);
public void onRequestFinished(IOException e);
}
public BasicHttpClient(OnRequestFinishedListener listener) {
this.mListener = listener;
}
private Runnable task = new Runnable() {
@override
public void run() {
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(URL);
HttpResponse httpResponse = httpClient.execute(httpGet);
mListener.onRequestFinished(httpResponse);
}
};
public void getResponse() {
ExecutorService executor = Executors.newSingleThreadExecutor();
FuturkTask<?> futureTask = new FutureTask<Object>(task, null);
executor.execute(futureTask);
}
}
public class Callee implements OnRequestFinishedListener {
public void getResult() {
BasicHttpClientAsync httpClient = new BasicHttpClientAsync(this);
httpClient.getResponse();
}
@override
public void onRequestFinished(HttpResponse httpResponse) {
System.out.println(httpResponse.toString());
}
}
コードは大幅に簡素化され、main() メソッドは Callee クラスの getResult() メソッドを呼び出します。ところで、すべての例外が処理され、コールバックを使用して呼び出し先に送り返します。
ただし、Callee クラスの「onRequestFinished」は呼び出されないようです。
助けてください。