Попытка dismiss () вашего предварительно созданного ProgressDialog выдает исключение после того, как ContentView был уничтожен, так как он больше не является частью вашего окна. попробуйте / поймайте LOT в ситуациях, выполняющих что-то отдельное (асинхронное). Все, на что вы можете положиться, могло просто исчезнуть или заменить что-то другое, когда onPostExecute () будет вызван снова. В конце концов подумайте о регистрации каждой ASyncTask, которую вы запускаете в каком-либо массиве в вашей деятельности, и попытайтесь отменить () их в вашем Activity.onDestroy ().

ю, что вопросы ProgressDialog with Threads задавались много раз, но ни одно из решений, похоже, не работает для моего проекта. По сути, я хочу сделать следующее: 1) когда пользователь нажимает кнопку, действие отправляет запрос на проверку подлинности на сервер. 2) в то время, когда это делается, отображается ProgressDialog. 3) когда приходит ответ, я хочу отклонить ProgressDialog и возвращаемый объект для чтения и интерпретации Activity

Если I: 1) установить поток для обновления поля приложения с ответом, следующий метод (который находится вне потока) выбрасывает NPE при доступе к полю 2) если я включаю следующий метод в поток, второй метод выдает «java.lang.RuntimeException: не удается создать обработчик внутри потока, который не вызвал Looper.prepare ()»

Извините за длинный текст, но я полностью теряю это ... Мой код выглядит так:

public class XXX extends Activity implements OnClickListener {

// (...)
private SoapObject returnObject;
private String response;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // (...)
        authProgressDialog = ProgressDialog.show(XXX.this, "", "Authenticating...", true, false);
        new Thread(new Runnable() {
            @Override
            public void run() {
                authenticate(); // method that calls the API via SOAP
                authenticateReal(); // method that handles the response
            }
        }).start();

        mHandler = new Handler() {
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                switch (msg.what) {
                    case 10:
                        authProgressDialog.dismiss();
                        break;
                }
            }
        };
    }
}

public void authenticate() {
    // API stuff (...)
    AndroidHttpTransport aht = new AndroidHttpTransport(URL);
    try {
        aht.call(SOAP_ACTION, soapEnvelope);
        returnObject = (SoapObject) soapEnvelope.getResponse();
        response = returnObject.getProperty("ResponseStatus").toString();
    }
    catch (Exception e) {
        e.printStackTrace();
    }
    finally {
        mHandler.sendEmptyMessage(10);
    }
}

// Method that needs to access returnObject and reponse objects and
// it is here where the NPE's or other exceptions are thrown
public void authenticateReal() {
// (...)
}

Ответы на вопрос(4)

Ваш ответ на вопрос