Почему я не могу получить доступ к методу из другого класса, но могу получить доступ к переменной? - PullRequest
0 голосов
/ 07 июля 2019

У меня есть два класса с именами abc и def.Класс abc имеет строку с именем «paths» и функцию с именем «test».Я могу легко использовать переменную «paths» из другого класса «def», но не могу вызвать функцию «test» из класса «def».

Я создал объект класса abc в классе def и попытался вызвать функцию, но она не работает.

public class abc extends Activity {
    String paths="path";
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        test("lol");
    }
    public void test(String name){
        Toast.makeText(abc.this,name,Toast.LENGTH_LONG).show();
    }
}

public class def extends Activity {
abc x= new abc();
String paths=x.paths;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Toast.makeText(def.this,paths,Toast.LENGTH_LONG).show();// This is 
    //working
    x.test("hahahas"); // Not working
    }
}

Я хочу, чтобы метод "test" из класса abcиспользоваться классом def, передавая параметр из класса def.

Ответы [ 3 ]

0 голосов
/ 07 июля 2019

Проблема в следующем

abc x= new abc();

Не следует создавать экземпляр чего-то, что расширяет Activity таким образом.Вы должны использовать startActivity или startActivityForResult

Кроме того, вам вообще не следует хранить ссылку на одно действие внутри экземпляра другого, потому что действия создаются и уничтожаются Android, поэтому ссылкавы держитесь за это может устареть.См. Жизненный цикл активности Android `.Для этого достаточно просто повернуть устройство.

Из учебника "Создайте свое первое приложение" мы запустим другое действие , предполагая, что вы действительно хотите запустить другое действие.Вы должны узнать о намерениях;Позвольте мне процитировать по этой ссылке:

Intent - это объект, который обеспечивает связывание во время выполнения между отдельными компонентами, например, двумя действиями.Намерение представляет собой намерение приложения что-то сделать.

0 голосов
/ 08 июля 2019

Спасибо за все ваши комментарии. Я нашел решение. В расширении класса вместо расширения Activity я использовал

public class def extends abc

делает класс "def" дочерним классом "abc". И после строки

super.onCreate(savedInstanceState);

в классе "def" я добавил одну строку, показанную ниже, которая выполнила работу.

super.test("lol123");

0 голосов
/ 07 июля 2019

Есть ли классы в одном пакете?(Я предполагаю, что они находятся в одном пакете, потому что у вас нет общедоступного infront String paths)

Если метод публичный, вы сможете вызывать его из любого места.Итак, я думаю, у вас есть проблема в вашем тестовом примере.попробуйте с классами, которые не расширяют Activity и имеют только методы, необходимые для тестирования.Затем расширяйте свой тестовый набор все дальше и дальше, пока он не перестанет работать.

Является ли переменная пути окончательной?Вы можете добавить к нему модификатор public static final.

...