Witam Chcę, aby Toast
był dla mnie dostępny bez względu na wszystko i dostępny z dowolnego wątku, kiedy tylko zechcę w mojej aplikacji. Więc to zrobić ja przedłużony klasę Activity
:android - wywoływanie wątku interfejsu użytkownika z wątku roboczego
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.widget.Toast;
public class MyActivity extends Activity{
private Handler mHandler;
@Override
public void onCreate(Bundle savedInstanceState) {
mHandler = new Handler();
super.onCreate(savedInstanceState);
}
private class ToastRunnable implements Runnable {
String mText;
public ToastRunnable(String text) {
mText = text;
}
public void run(){
Toast.makeText(getApplicationContext(), mText, Toast.LENGTH_SHORT).show();
}
}
public void doToast(String msg) {
mHandler.post(new ToastRunnable(msg));
}
}
tak aby wszystkieActivity
zajęcia w mojej aplikacji są teraz po prostu
public class AppMain extends MyActivity {
//blah
}
czego się spodziewałem, aby móc to zrobić (w wątku roboczego) było to:
try{
MyActivity me = (MyActivity) Looper.getMainLooper().getThread();
me.doToast("Hello World");
}
catch (Exception ex){
Log.e("oh dear", ex.getMessage());
}
i tak długo, jak Activity
był „MyActivity
” to powinno działać - ale problem polega na tym, że --- Looper.getMainLooper().getThread();
nie zwraca mi wartości MyActivity
i to powoduje, że płaczę - co robię źle?
: EDIT:
niektóre tła wyjaśnić "dlaczego" Siedzę z tego typu implmentation.
Muszę być w stanie potwierdzić użytkownikowi, że zdarzenie "POST HTTP" zakończyło się sukcesem. Teraz. Jeśli użytkownik kliknie "OK" na formularzu UI MAY lub NIE MA MAI Internetu w tym czasie .. Jeśli ma Internet - wszystko dobrze i dobrze - to wysyła formularz przez HTTP POST wszystko dobrze i dobrze .. ale jeśli istnieje NO Internet większość (99,999% z Android lame/żałosne/mewling na to, a przede wszystkim zaoferować użytkownikowi nie plan „b” zakładając, że w każdej chwili internet jest tam - gdy nie jest)
Moja aplikacja nie "pójdzie źle (jak ja to nazywam)" - ma plan "b" zamiast tego "Kolejkuje" zdarzenie postu i ponawia próbę co x minut .. teraz jest to cichy wątek w Tło .. Mam dużo interakcji użytkownika w całej aplikacji, nie wiem, gdzie użytkownik będzie "być", ale w końcu, gdy HTTP POST, kolejka/ponowna próba/kolejka/ponowienie, zwróci "! Powodzenie! "Chcę Toast
że jako wiadomość do użytkownika (np:«Twój formularz został wysłany»)
Nie, chcę odpowiedzieć 'wiadomości Toast' dla użytkownika,' runOnUiThread' akceptuje 'Runnable action który' Toast' nie działa z – conners
nie ma 'activity' ponieważ nie ma' kontekst ' – conners
Dlaczego nie użyć' getApplicationContext() '? – Rawkode