2016-03-07 2 views
0

У меня есть функция Main2Activity, и она состоит из переменной «double result1», которая устанавливается равной выражению. Это выглядит следующим образом:Обмен переменными на разных этапах работы в Android Studio

double result1 = n1 * 2 - 29; (где n1 является входом задается пользователем)

Я пытаюсь использовать эту переменную в другой класс называется MainActivityEnd. Я попытался это:

double finalResult = Main2Activity.result1 * 4; 

При печати Result1 в Main2Activity с помощью setText печатает правильное значение.

Но когда я печатаю finalResult в MainActivityEnd с помощью setText Он всегда печатает 0.0

Есть ли причина для этого?

Спасибо за помощь!

+0

Возможно, вам захочется показать фактический код, который вы пробовали. –

+0

передайте свой двойник в ваших намерениях, которые вы используете для начала своей деятельности. – tyczj

+0

Либо передайте свою переменную в намерении, которое вы используете для запуска другой деятельности, или используете SharedPreferences. – chRyNaN

ответ

0

Используйте Intents или SharedPreferences, как и другие люди, уже упомянутые здесь.

Если, однако, вы планируете использовать некоторую глобальную логику (например, методы), используйте класс Application.

Вы можете расширить класс приложений, как это:

public class YourApplication extends Application { 
    public double result1 = 29; 
} 

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

YourApplication app = (YourApplication) this.getApplication(); 
System.out.printl(app.result1); 

Убедитесь, что вы назвали ваш класс приложения должным образом, оно должно быть [YOUR_APP_NAME]Application. А также не забудьте поставить новый класс приложений в manifest:

<application 
    android:name=".YourApplication" 
+3

Это ужасный подход. Вместо этого вы должны использовать SharedPreferences. – chRyNaN

+0

Есть два способа, которыми это может вас укусить: Android убивает ваш процесс, и ваши действия позже воссоздаются и обнаруживают глобальное состояние неинициализированным; или Android * не * убивают ваш процесс, когда заканчивается ваш последний вид деятельности, а глобальное состояние переносится на следующий запуск приложения. Глобальное государство - это зло, но это особенно зло на Android. –

+0

@KevinKrumwiede есть альтернатива для расширения приложения, если вы хотите иметь глобальное место для своей логики (методов)? – divix

2

Если деятельность в том же потоке, вы должны использовать следующий Android путь - намерения. Проще говоря, Intent - это способ Android изменять значения между действиями при их запуске в последовательном порядке.

Таким образом, вы должны сделать следующее Main2Activity:

Intent intent = new Intent(Main2Activity.this, MainActivityEnd.class); 
intent.putExtra("name", variable); 
startActivity(intent); 

где Main2Activity начинает MainActivityEnd. Намерение заполнено данными MainActivityEnd, которые в этом случае являются «переменными».

После этого вы должны поймать Intent в MainActivityEnd OnCreate() метод как это:

Intent intent = getIntent(); 
double finalResult = intent.getDoubleExtra("name", 0); 

где «имя» одно и то же имя, которое было дано в Main2Activity и 0 значение по умолчанию, если не было двойное значение, привязанное к Intent в Main2Activity.

Это наиболее распространенное использование этого поведения в Android.

+0

Спасибо, что это сработало! –

Смежные вопросы