2012-05-11 4 views
0

Мне нужно получить размеры экранов, чтобы приложение работало. для этого я создал 2 функции в своей основной деятельности и im вызывал их через объекты из класса non-Activity.Android, получающий размер изображения от класса неактивности

По какой-то причине он продолжает падать. Почему я не могу назвать эти функции? Как это исправить?

Кодекс основной деятельности:

public int getWidth(){ 
    Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
    int width = display.getWidth(); 
    return width; 
} 

public int getHeight(){ 
    Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
    int height = display.getHeight(); 
    return height; 
} 

Код неактивности (вызывающая часть):

main Main = new main(); 
private int height = Main.getHeight(); 
private int width = Main.getWidth(); 

Пожалуйста, обратите внимание, я знаю эти методы устарели, но я не могу использовать GETSIZE (точка); потому что im развивается для минимального уровня API 7.

+0

Опубликовать трассировку стека от y наша авария. – kabuko

+0

Ничего не видно, он падает на первой строке getHeight(); потому что это первый вызов. – arielschon12

+0

нельзя передать контекст в конструкторе класса без активности? –

ответ

1

Вы не можете просто создать Activity с его конструктором и ожидать, что он будет правильно инициализирован. Это не так, как это работает. Если вы просто позвоните с конструктором, у него не будет своего контекста, который должен получить системные службы. Вам нужно получить эту информацию из реального экземпляра активности, а затем передать ее объектам, которым нужны эти данные. Без дополнительной информации/кода это не очень практично, чтобы дать больше деталей, чем это.

3

Вы можете создать класс Constants, содержащие поля статики, которые вы инициализации в onCreate из ваших Activity как:

public class Constants 
{ 
    public static int DEVICE_WIDTH; 
    public static int DEVICE_HEIGHT; 
} 

активность

onCreate(...) 
{ 
    ... 
    Constants.DEVICE_WIDTH = this.getWidth(); 
    Constants.DEVICE_HEIGHT = this.getHeight(); 
} 

И когда вы нужны эти значения, вызовите его:

int deviceWidth = Constants.DEVICE_WIDTH; 
Смежные вопросы