#java
Есть 3 класса внутри одного пакета: Осуществляет посылку запроса на авторизацию; Получает ответ; Работает с ответом. Проблема в том, что не понимаю, как получить ссылку на объект, который создается в первом классе из 3-его. Class1.java - Запрос авторизации UserData userData; public void calcLogin(){ ht.call(SOAP_ACTION + methodname, envelope, header); SoapObject resultsString = (SoapObject)envelope.getResponse(); userData.setDataStore("ID", resultsString.getProperty(0).toString()) } Я хочу получить результат выполнения действия в 3-ем классе. class3.java class UserData { static MapdataStore = new HashMap (); } public void setDataStore(String a1, String a2){ dataStore.put(a1,a2); } Но я не вижу такого объекта. Получается, что его нет в памяти. Подскажите, куда копать и на что обратить внимание.
Ответы
Ответ 1
Переменная не будет видна, если она объявлена внутри метода, так как на нее не существует жесткой ссылки. Иными словами, после выполнения метода переменная действительно стирается из памяти (ну, с учетом особенностей работы сборщика мусора). Чтобы увидеть переменную, необязательно объявлять ее статичной, достаточно в самом начале класса, в блоке описания переменных, объявить ее как protected (видимость внутри пакета) или public (общая видимость). Вроде того: class Class1{ protected UserData ud1; protected static UserData ud2; public void someMethod(){ UserData ud3; } } Здесь переменная ud1 будет видна всем классам внутри пакета через экземпляр класса Class1 (например, new Class1().ud1) - и, соответственно, будет разная для каждого экземпляра класса. Статичная переменная ud2 - это переменная, одинаковая для всех экземпляров класса. Будет доступна для всех классов внутри пакета через Class1.ud2 . Вряд ли это то, что вам нужно. Ну а третья переменная ud3 отойдет сборщику мусора после выполнения метода.Ответ 2
Честно говоря, я не понял чего именно вы хотите. Но если я подумал в правильном направлении, то примерный код: class Class1 { ... public UserData getUd1() { return ud1; } ... } class Class3 { ... private UserData ud1; ... public void setUd1(UserData ud1) { this.ud1 = ud1; } ... } public static void main(String args[]) { Class1 class1 = new Class1(); Class3 class3 = new Class3(); class3.setUd1(class1.getUd1()); }Ответ 3
При создании объекта Сlass3.java нужно в него как-то передать объект UserData ud1 = new UserData(); Т.к. ud1 это локальная переменная в Class1.java и видна только в той функции, где ее создали. После этого получите доступ ко всем свойствам ud1 включая и ud1.getID() З.Ы. Пройдитесь по теории области видимости в javaОтвет 4
Как вариант: Class1: public final class Class1 { //Возвращает версию Android public static String getmVersRelease() { String mVersRelease = Build.VERSION.RELEASE; return mVersRelease; } //Версия SDK public static int getmVersSdk() { int mVersionSdk = Build.VERSION.SDK_INT; return mVersionSdk; } } Class2: import static com.example.dddddd.testTest.Class1.getmVersRelease; import static com.example.dddddd.testTest.Class1.getmVersSdk; Далее уже используем ваши переменные mVersRelease и mVersionSdk в этом классе...
Комментариев нет:
Отправить комментарий