Геттеры возвращают ноль
Я знаю, почему возникает моя проблема, но я не знаю, как с ней бороться.
Итак, у меня есть 3 класса, 1 из них содержит мои методы получения и установки. В одном классе я устанавливаю значения, в другом я получаю значения. Когда я получаю значения, они возвращаются нулевые. Это очевидно, потому что два экземпляра объекта получения / установки, которые я создал в классах, отделены друг от друга. Я пытаюсь выяснить, как я могу установить значения в одном классе и получить их в другом, не имея двух отдельных экземпляров класса getter/setter. Моя формулировка ужасна, поэтому вот более наглядное объяснение:
1 класс
Encapsulation encap = new Encapsulation();
encap.setValue(10);
Класс 2
Encapsulation encap = new Encapsulation();
encap.getValue(); //I want this to return 10
Класс 3 (Инкапсуляция)
private int value;
public void setValue(int value){
this.value = value;
}
public int getValue(){
return value
}
3 ответа
В Class2 вы создаете новый экземпляр класса Encapsulation. (Обратите внимание на новую инкапсуляцию ()). Очевидно, что это не будет содержать значения.
Вместо этого я бы предложил вам два решения:
Первый:
Сохраните этот объект в классе приложения, когда вы работаете над приложением Android.
public class TestApplication extends Application {
public Encapsulation tempClass;
public TestApplication () {
// TODO Auto-generated constructor stub
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
}
public Encapsulation getTempClass() {
return tempClass;
}
public void setTempClass(Encapsulation tempClass) {
this.tempClass = tempClass;
}
}
Теперь в вашей деятельности:
//after setContentView
testAppObj = (TestApplication) getApplication();
testAppObj.setTempClass(myTempClassObj);
//retrieve as:
Encapsulation obj = testAppObj.getTempClass();
Вы должны зарегистрировать свой класс Application в файле манифеста так же, как вы регистрируете свои действия:
<application
android:name="com.pkg.test.TestApplication " />
Во-вторых:
Сохраняйте объект encap как статический в Class1. Таким образом, вы можете получить к нему доступ из calss2. (Я не предпочитаю статический.)
Надеюсь, поможет.
Сделать значение статическим, оно будет одинаковым для всех Encapsulation
экземпляры
private static int value;
public void setValue(int aValue){
value = aValue;
}
public int getValue(){
return value;
}
Просто объявите объект класса Encapsulation один раз и используйте один и тот же экземпляр для вызова метода получения и установки.
Как это:
Encapsulation encap = new Encapsulation();
encap.setValue(10);
encap.getValue();
Оно работает.