Java AsyncTask Ищете альтернативу Get (), потому что мне нужно, чтобы он зацикливался в самом потоке, а не создавал новый поток? - PullRequest
1 голос
/ 01 октября 2019

Мне нужно, чтобы doinBackground () зациклился / ожидал получения данных перед вызовом onPostExecute ();

У вызовов данных из Firebase есть время ожидания. Я знаю, что у нас есть функция get (), но этот тип талии в миллисекундах, я ищу обходной путь, при котором мне не нужно делать логическую проверку, просто подождите данные и затем вызовите следующуюнить оттуда. таким образом, переход может двигаться плавно.

private class GetDatafromFirebaseLoop extends AsyncTask<Void,Void,Void>{
        private boolean dataRecieved = false;
        String FirstName,MiddleName,LastName;

        @Override protected void onPreExecute() {
            User.Id = FirebaseAuth.getInstance().getCurrentUser().getUid();

            runOnUiThread(new Runnable() {
                @Override public void run() {
                    mTitle.setText("UserId : ");
                    mQuestion.setText(User.Id);
                }
            });
            super.onPreExecute();
        }
        @Override protected Void doInBackground(Void... voids) {
           FirebaseDatabase.getInstance().getReference("UsersInfo").child(Users.Id).addListenerForSingleValueEvent((new ValueEventListener() {
                @Override public void onDataChange(DataSnapshot dataSnapshot) {
                    if (dataSnapshot.exists() && dataSnapshot.getChildrenCount() > 0) {
                        Map<String, Object> map = (Map<String, Object>) dataSnapshot.getValue();
                        if (map.get("FirstName") != null) {
                            FirstName = map.get("FirstName").toString();
                        }
                        if (map.get("MiddleName") != null) {
                            MiddleName = map.get("MiddleName").toString();
                        }
                        if (map.get("LastName") != null) {
                            LastName = map.get("LastName").toString();
                        }
                    }
                }
                @Override public void onCancelled(DatabaseError databaseError) {}
            }));
            return null;
        }
        @Override protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            if(dataRecieved){
                dataRecieved = false;
                mTitle.setText("FullName");
                mQuestion.setText(FirstName + " " + MiddleName + " " + LastName);
                New RunNewAsyncTask().execute();// Which also continues this same format for other data.

            }
            else {
                execute(new Runnable() {
                    @Override public void run() {
                        doInBackground();
                    }
                });
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...