Как переместить основной поток вперед после завершения фонового потока - PullRequest
0 голосов
/ 28 июня 2019

Я звоню по сети и выбираю топологию, как только пользователь запустит приложение.Вот загвоздка, чтобы сначала получить топологию, мне нужно несколько значений от поставщика контента другого приложения. Каждый ответ в блогах в Интернете говорит, что запросы к 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();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...