Приложения для Android не работают в эмуляторе

Ни одно из моих приложений не работает в эмуляторе. Я использую Ubuntu 9.10, и каждый раз, когда я пытаюсь получить доступ к своему пользовательскому интерфейсу, приложение вылетает. Все, что я получаю, это "Извините! Приложение... неожиданно остановилось". Для КАЖДОГО приложения это происходит.

package com.mohit.helloandroid;

import android.app.TabActivity;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.widget.TabHost;

public class HelloAndroid extends TabActivity {

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

        Resources res = getResources();     //Resource object to get drawables
        TabHost tabHost = getTabHost();     //The activity tabhost
        TabHost.TabSpec spec;           //Reusable tab spec 
        Intent intent;

        intent = new Intent().setClass(this, HelloAndroid.class);

        spec = tabHost.newTabSpec("artists").setIndicator("Artists", res
            .getDrawable(R.drawable.tab_artists))
                .setContent(intent);
        tabHost.addTab(spec);
    }
}

Я не знаю, как этот код мог выдать такое сообщение.


person Mohit Deshpande    schedule 05.05.2010    source источник
comment
Можете ли вы опубликовать исключение, которое вы получаете из журналов?   -  person haseman    schedule 06.05.2010
comment
Нет никаких исключений. Вот почему я в замешательстве.   -  person Mohit Deshpande    schedule 06.05.2010
comment
Можете ли вы опубликовать XML-код макета и XML-файл androidManifest?   -  person Mark    schedule 06.05.2010


Ответы (1)


У вас есть по крайней мере пара дурацких вещей, и любая из них может привести к взрыву бомбы.

Сначала вы позвонили:

super.onCreate(savedInstanceState);
setContentView(R.layout.main);

Но вы создали подкласс TabActivity, который устанавливает собственное представление содержимого при вызове super.OnCreate. Учитывая код, который у вас есть, я предполагаю, что ваш R.layout.main, вероятно, пуст. Избавьтесь от вызова setContentView.

Далее вы звоните:

intent = new Intent().setClass(this, HelloAndroid.class);

Вы пытаетесь создать намерение для отображения на вкладке, передав этот класс, который сам является tabHost, и попытается сделать все это снова, когда вызывается его onCreate. Если бы Android позволил этому случиться, вы бы только что создали бесконечно рекурсивный вызов, и это привело бы к сбою телефона, когда ему не хватило памяти. Скорее всего, я думаю, что Android просто взорвется, за некоторыми исключениями, или ОС просто уничтожит процесс.

Начните проще. Создайте пару основных представлений в своих ресурсах для отображения на вкладках.

person Mark    schedule 06.05.2010