AsyncTask и Activity, как это сделать - PullRequest
1 голос
/ 15 января 2012

Мое основное приложение делает это: оно получает данные из интернета и имеет 3 кнопки, когда при нажатии я иду на 3 других экрана. поскольку загрузка данных может быть немного медленной, я хочу использовать асинхронную задачу. Это мой пример кода для asynctask.

class LoginProgressTask extends AsyncTask {
        @Override
        protected Boolean doInBackground(String... params) {
            try {
                Thread.sleep(4000);  // Do your real work here
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return Boolean.TRUE;   // Return your real result here
        }

        @Override
        protected void onPreExecute() {
            showDialog(AUTHORIZING_DIALOG);
        }

        @Override
        protected void onPostExecute(Boolean result) {
            // result is the value returned from doInBackground
            removeDialog(AUTHORIZING_DIALOG);
        }
}

и это мой образец моей основной деятельности:

public class MainScreen extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        MainTheme();
    }
    public void MainTheme(){
         retrieve_data(); //function for getting the data
         ... action with the buttons, onClicks Listener
    }
}

У меня вопрос, как я могу смешать эти коды в одном упражнении, чтобы он работал, потому что я не понял AsyncTask. Или что я должен вернуть в doInBackground?

Ответы [ 3 ]

1 голос
/ 16 января 2012

Я узнал об этом по ссылке * AsynTask .может быть, это будет полезно и вам, сначала прочитайте весь пример, затем начните применять его к своему коду.

0 голосов
/ 22 марта 2012

Например, если у вас есть Button для входа, вы должны сделать что-то вроде этого:

Button button; //Here button to go other sreen
public void onCreate(){
  //some business code here
  //notice: you have declare you button to your layout. I don't post it, but maybe you know how to
  button.setOnClickListener(new OnClickListener){
    @Override
    public void onClick(View view){
        LoginProcessTask loginTask = new LoginProcessTask(this);
        login.excute(data of param1);
    }
  }
}

И вы должны заметить, что в вашем LoginProcessTask вы неправильно его расширили. Должно быть (только для примера):

class LoginProgressTask extends AsyncTask<String, Integer, Integer>{ ......}
0 голосов
/ 16 января 2012

Вы можете использовать Service вместо AsyncTask. Это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...