私はVk Sdkを使用しています。バックグラウンドでサーバーからデータをロードするAsyncTaskを作成しました。しかし、その内部のタスクが完了する前にdoInBackground()
が終了していることがわかります。以下のコードは次のとおりです。AsyncTaskは、内部のメソッドが終了する前にdoInBackground()を終了しています。
@Override
protected Void doInBackground(Void... params) {
Log.v(TAG, "Before Loading in Background");
VKRequest request = VKApi.wall().get(VKParameters.from(VKApiConst.OWNER_ID, "-100177655", VKApiConst.OFFSET, "2"));
request.executeWithListener(new VKRequest.VKRequestListener() {
@Override
public void onComplete(VKResponse response) {
super.onComplete(response);
String jsonData = response.responseString;
Log.v(TAG, "json is ready");
try {
Log.v(TAG, "before parsing");
parsePostsData(jsonData);
Log.v(TAG, "after parsing");
} catch (JSONException e) {
Log.v(TAG, "EXCEPTION is thrown");
e.printStackTrace();
}
}
});
Log.v(TAG, "Finished Background Tasks");
return null;
}
私はrequest.executeWithListener(...)
は別のスレッドを作成し、そこに必要な仕事をしていると思われます。したがって、AsyncTaskはスレッド内の作業が終了したと考えます。しかし、私は確信していません。このメソッドについては、ドキュメントには何もありません。
もう一つの問題は、それが呼び出されたときにonComplete(...)
メソッドが実行されているスレッド上にありますか?メインまたは同じ個別のスレッドでrequest
によって作成されますか?
すべてのヘルプは高く評価され:)
あなたは正しいです。コールバック/リスナーが原因です。要求が非同期 –
いる場合は、私はそれがokHttpの 'Call'は、非同期コールバックを実行 –
@ElvisChweyaに似て動作することを前提とし' AsyncTask'を必要としない、あなたは 'onCompleteの(...)'メソッドについてどう思いますか?メインスレッドで実行されていますか?それを確認する方法は?ここhttps://github.com/VKCOM/vk-android-sdk/blob/master/vksdk_library/src/main/java/com/vk/sdk/api/VKRequest.javaソースコードから – Marat