Я звоню по сети и выбираю топологию, как только пользователь запустит приложение.Вот загвоздка, чтобы сначала получить топологию, мне нужно несколько значений от поставщика контента другого приложения. Каждый ответ в блогах в Интернете говорит, что запросы к ContentProvider должны выполняться в фоновом потоке;что имеет смысл и для меня.Но если я сделаю фоновый поток и сделаю запрос к CP, основной поток моего приложения начнет выполняться, прежде чем я получу значения из CP.Как справиться с этим сценарием?
До сих пор я пробовал AsyncTask и показывал Progress Dialog в preExecute () и отклонял его в postExecute (), но тогда он также бесполезен для моего сценария.
@Override
protected void onPreExecute() {
super.onPreExecute();
// building URI for content resolver
//contentURI = new Uri.Builder().build().parse(contentPath);
progressDialog.setMessage("calling ContentProvider");
progressDialog.setIndeterminate(true);
progressDialog.setCancelable(false);
progressDialog.setCanceledOnTouchOutside(false);
if(!SplashActivity.this.isFinishing()) {
progressDialog.show();
}
Log.d(TAG, "calling ContentProvider ");
Log.d(TAG, "calling @ ===> " + contentURI);
}
@Override
protected Cursor doInBackground(Void... voids) {
ContentResolver resolver = getContentResolver();
try{
Cursor cursor = resolver.query(contentURI, null, null, null, null);
return cursor;
}catch (Exception e){
e.getLocalizedMessage();
}
return null;
}
@Override
protected void onPostExecute(Cursor cursor) {
super.onPostExecute(cursor);
if (null == cursor) {
Log.e(TAG, "ContentProvider returned null response.");
} else if (cursor.getCount() < 1) {
Log.e(TAG, "ContentProvider returned empty response.");
} else {
Log.d(TAG, "ContentProvider returned Data Successfully.");
mContentProviderData = cursor;
int rawReturned = cursor.getCount();
Log.d(TAG, "Number of raws returned into CP: " + String.valueOf(rawReturned));
}
progressDialog.dismiss();
}