Spring и В спящем режиме, определенно делают жизнь легче. Начало работы с ними могло бы быть немного трудоемким вначале, но Вы, конечно, извлечете выгоду из него позже. Теперь XML заменяется аннотациями, Вы не должны вводить сотни строк XML также.
можно хотеть полагать AppFuse уменьшать кривую обучения: генерируйте приложение, учитесь и адаптируйтесь, оно, и от Вас идет.
Какая у вас версия API? с помощью? Если я прав в том, в чем проблема, то это было исправлено в Android 1.6 (API версии 4).
Похоже, что ссылка на объект, getApplicationContext ()
возвращает просто указывает на null. Я думаю, у вас возникла проблема, аналогичная той, что была у меня, в том, что часть кода в onCreate ()
запускается до того, как окно действительно построено. Это будет взлом, но попробуйте запустить новый поток за несколько сотен миллисекунд (мне показалось, что IIRC: 300-400 работает, но вам нужно повозиться), который открывает ваш ProgressDialog и запускает все, что вам нужно ( например, сетевой ввод-вывод). Примерно так:
@Override
public void onCreate(Bundle savedInstanceState) {
// do all your other stuff here
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
mProgressDialog = ProgressDialog.show(
YouTube.this.getApplicationContext(), "",
YouTube.this.getString(R.string.loading), true);
// start time consuming background process here
}
}, 1000); // starting it in 1 second
}
Я не думаю, что это проблема синхронизации вокруг нулевого контекста приложения
Попробуйте расширить Application в вашем приложении (или просто используйте его, если вы уже сделали это)
public class MyApp extends Application
Сделайте экземпляр доступным как частный синглтон. Это никогда не будет null
private static MyApp appInstance;
Сделайте статический помощник в MyApp (который будет использовать синглтон)
public static void showProgressDialog( CharSequence title, CharSequence message )
{
prog = ProgressDialog.show(appInstance, title, message, true); // Never Do This!
}
БУМ!!!
Также посмотрите ответ инженера android здесь: WindowManager$BadTokenException
Одной из причин этой ошибки может быть попытка отобразить приложение окно/диалог через Context, который не является Activity.
Теперь, я согласен, это не имеет смысла, что метод принимает параметр Context, а не Activity...
Я использую Android версии 2.1 с API уровня 7. Я столкнулся с этой (или подобной) проблемой и решил ее, используя следующее:
Dialog dialog = new Dialog(this);
вместо этого:
Dialog dialog = new Dialog(getApplicationContext());
Надеюсь, это поможет :)
Я реализовал Alert Dialog для исключения, возникающего в текущем представлении активности.Всякий раз, когда у меня возникало вот такое
AlertDialog.Builder builder = new AlertDialog.Builder(context);
Исключение в окне.Я пишу код для оповещения из onCreate().Так просто я использовал context = this;
после setContentView()
в onCreate()
методе. Взял переменную context как глобальную, например Context context;
Пример кода
static Context context;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.network);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
context = this;
.......
Пример метода Alert
private void alertException(String execMsg){
Log.i(TAG,"in alertException()..."+context);
Log.e(TAG,"Exception :"+execMsg);
AlertDialog.Builder builder = new AlertDialog.Builder(context);
.......
У меня все работает нормально.Вообще-то я искал эту ошибку на StackOverflow и нашел этот запрос.Прочитав все ответы в этом посте, я попробовал этот способ и он работает.Я подумал, что это простое решение для преодоления исключения.
Спасибо, Rajendar
Чтобы обойти это, я создал базовый класс для всех моих действий, в котором я храню глобальные данные. В первом действии я сохранил контекст в переменной в моем базовом классе следующим образом:
Базовый класс
public static Context myucontext;
Первое действие, производное от базового класса
mycontext = this
Затем я использую mycontext вместо getApplicationContext при создании диалогов.
AlertDialog alertDialog = new AlertDialog.Builder(mycontext).create();
Я создаю представление карты с детализированными наложениями. Я создавал свое itemizedoverlay, как это из моего mapActivity:
OCItemizedOverlay currentLocationOverlay = new OCItemizedOverlay(pin,getApplicationContext);
Я обнаружил, что получу исключение "android.view.WindowManager$BadTokenException: Не удается добавить окно -- token null не для приложения", когда запускается метод onTap моего элементарного оверлея (когда местоположение нажимается на mapview).
Я обнаружил, что если я просто передаю 'this' вместо 'getApplicationContext()' своему конструктору, проблема исчезнет. Это, по-видимому, подтверждает вывод alienjazzcat. странный.