как вызвать нестатический метод из статического метода в Android

Я столкнулся с большой проблемой при вызове нестатического метода из статического метода.

это мой код

Class SMS
{
    public static void First_function()
    {
        SMS sms = new SMS();
        sms.Second_function();
    }

    public void Second_function()
    {
        Toast.makeText(getApplicationContext(),"Hello",1).show(); // This i anable to display and cause crash
        CallingCustomBaseAdapters();    //this was the adapter class and i anable to call this also
    }

Я могу вызвать Second_function, но не могу получить метод Toast и CallCustomBaseAdapter(), происходит сбой.

Что мне делать, чтобы решить эту проблему?


person Vishnu    schedule 09.10.2012    source источник
comment
Нет никакого способа достичь своей цели, и было бы странно, если бы было преодоление. static методы и поля принадлежат классам, а не static методы и поля принадлежат экземплярам классов. Для вызова метода, отличного от static, вам нужен экземпляр класса, вот и все. Надеюсь это поможет.   -  person Egor    schedule 09.10.2012
comment
Функции-члены вызываются в конкретном экземпляре.   -  person aamit915    schedule 09.10.2012
comment
@ Егор, да, я согласен с вами, здесь я использовал экземпляр класса для вызова нестатического метода, а из Second_function (нестатический метод) я хочу вызвать другой метод и пользовательские адаптеры, но я не могу .. как это сделать?   -  person Vishnu    schedule 09.10.2012
comment
Попробуйте передать контекст в качестве аргумента в нестатическом методе, используя статический метод. Я имею в виду передать контекст статическому методу, а затем передать тот же контекст нестатическому методу.   -  person Dharmendra    schedule 09.10.2012
comment
Я думаю, помимо ознакомления с некоторыми стандартами кода Java (например, использование заглавных букв), вам следует спросить, что вы пытаетесь сделать. Я даже не уверен, как ваш код может компилироваться - SMS, похоже, не имеет доступа к какому-либо контексту. SMS должен расширять некоторый класс, производный от Context. Ваш код работал бы нормально, если бы во втором методе ничего не было, но есть вещи, которые незаконны. Кроме того, никто не использует 1 в качестве длины Toast, используйте Toast.LENGTH_{SHORT|LONG}   -  person aamit915    schedule 09.10.2012


Ответы (2)


  public static void First_function(Context context)
  {
    SMS sms = new SMS();
    sms.Second_function(context);
  }

  public void Second_function(Context context)
  {
    Toast.makeText(context,"Hello",1).show(); // This i anable to display and cause crash
  }

Единственное решение для достижения этого состоит в том, что вам нужно передать текущий контекст в качестве параметра. Я написал код только для Toast, но вам нужно изменить его в соответствии с вашими требованиями.

передать контекст из вашей деятельности First_function(getApplicationContext()) и т. д..

для статической строки

public static String staticString = "xyz";

public static String getStaticString()
{
  return staticString;
}


String xyz = getStaticString();
person V.J.    schedule 09.10.2012
comment
Можно ли переместить строковое значение из статической строки в нестатическую строку? - person Vishnu; 09.10.2012

У вас должна быть ссылка на Context. Вы пытаетесь получить контекст приложения из экземпляра SMS.

Я предполагаю, что вы вызываете First_function из Activity или Service. Итак, вы можете сделать это:

Class SMS
{
    public static void First_function(Context context)
    {
        SMS sms = new SMS();
        sms.Second_function(context);
    }

    public void Second_function(Context context)
    {
        Toast.makeText(context,"Hello",1).show(); // This i anable to display and cause crash
        CallingCustomBaseAdapters();    //this was the adapter class and i anable to call this also
    }

Затем из вашей деятельности:

SMS.First_function(this); //or this.getApplicationContext() 
person Sebastian Breit    schedule 09.10.2012
comment
Не подскажете, как получить ссылку? - person Vishnu; 09.10.2012
comment
Чем ваш код лучше исходного кода? SMS по-прежнему не имеет ссылки на контекст — это просто класс, который не расширяет активность. Исходный код был хорош в том смысле, что нестатические методы не вызывались в статическом контексте. К сожалению, кажется, что Вишну понятия не имеет, что происходит, но это не значит, что вы просто соглашаетесь с этим. - person aamit915; 09.10.2012
comment
Вам придется опубликовать весь свой код, если вам нужна помощь от меня. Извините, но, к сожалению, я не могу понять, что вы пытаетесь сделать :( - person aamit915; 09.10.2012
comment
лол ... пользователи stackoverflow иногда забавны ... принятый ответ точно такой же, как у меня, но у меня есть один отрицательный голос ... отлично - person Sebastian Breit; 09.10.2012