Я пытаюсь отобразить Toast внутри AsyncTask. Это первая часть кода помещается в деятельности, мы можем назвать MyActivity
, и работает отлично:Проблемы с контекстом при попытке отображения Toast
Toast.makeText(this, "Toast!", Toast.LENGTH_SHORT).show();
Затем я создаю новый экземпляр MyObject
и вызывает method()
. Этот код также размещен в MyActivity
.
MyObject obj = new MyObject(this);
obj.method();
Это определение MyObject
. ProgressDialog отлично работает, но нет тостов.
public class MyObject {
Context cxt;
public MyObject(Context cxt) {
this.cxt = cxt;
}
public void method() {
new MyAsyncTask().execute();
}
private class MyAsyncTask extends AsyncTask<Object, Integer, Boolean> {
protected void onPreExecute() {
Toast.makeText(cxt, "Toast!", Toast.LENGTH_SHORT).show(); // works fine
}
protected Boolean doInBackground(Object... params) {
Looper.prepare();
Toast.makeText(cxt, "Toast!", Toast.LENGTH_SHORT).show(); // doesn't work
}
}
}
Я полагал, что делал то же самое в своем первом примере и ниже, но, видимо, я что-то упускаю. Я также пробовал getApplicationContext()
и cxt.getApplicationContext()
вместо cxt
, но с тем же результатом.
Вы не должны создавать новые экземпляры деятельности с 'new' – Falmarri
К сожалению, я не делаю этого обычно. Я просто переписал свой обычный код в лучший пример и не думал об этом. Но спасибо за это! :) – nip3o