2013-06-27 3 views
0

Как передать char1 из метода onCreate в другой метод - в этом случае передать его в selectChar2? Могу ли я сделать char1 и char2 глобальным или что-то еще? Я не уверен, что это правильный способ. пожалуйста помоги!Как использовать переменные за пределами метода

private String char1,char2; // does this even do anything? I thought this would let me use char1 and char2 anywhere. 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_pick_char2); 

    Bundle extras = getIntent().getExtras(); 
    if (extras != null) { 
     String char1 = (String) extras.getString("char1"); //is the (String) necessary? 

     TextView textView = (TextView) findViewById(R.id.header); 

     textView.setText(char1+" vs "+"char2"); 

    } 


} 

public void selectChar2(View v) { 
    Button btn = (Button)v; 
    String char2 = btn.getText().toString(); 
    Intent intent = new Intent(PickChar2.this, DisplayMatchUp.class); 
    Bundle extras = new Bundle(); 

    extras.putString("Character1",char1); //char1 here is null...how do I get the value from the method above? 
    extras.putString("Character2", char2); 

    intent.putExtras(extras); 
    startActivity(intent); 
+0

char1 & char2 является глобальным уже, что означает, что они доступны для ссылок целей в любой части вашего класс, за исключением статических методов –

+0

сделать их общедоступными для простоты –

+0

@MocialovBoris Технически переменные 'char1' и' char2' являются * членами *. Java не имеет истинных глобальных переменных. Тем не менее, ваш основной вопрос по-прежнему верен: они доступны как в методах 'onCreate()', так и 'selectChar2()'. –

ответ

2

, как это, вы заявили, и используются два отдельных переменных:

  1. переменная экземпляра: char1
  2. локальная переменная: char1

1 распространяется до класса (он доступен в любой нестатической области внутри класса). 2 - в блоке, где он определен. в этом случае просто не создают локальную переменную и использовать переменную экземпляра,

char1 = (String) extras.getString("char1"); 
+0

так, чтобы убедиться, что я правильно понял. Что я в основном сделал, это перезаписать переменную экземпляра локальной переменной? btw, что такое переменная экземпляра? – user2498691

+0

@ user2498691 Возможно, вы захотите попробовать некоторые обучающие программы Java. – GriffeyDog

+0

переменная экземпляра принадлежит или связана с экземпляром класса. я бы не сказал, что ты переписал его. это означало бы, что было одно значение, и вы изменили его. у вас на самом деле есть две совершенно разные переменные. они внешне имеют одно и то же имя, но вы должны также рассмотреть сферу действия. –

0

Вы должны, вероятно, сделать его публичным, или сделать его параметром в обоих методах.

0

В верхней части вашей программы, вы создаете глобальную переменную char1 ...

private String char1,char2; 

Но в методе onCreate(), у вас есть следующие строки ...

String char1 = (String) extras.getString("char1"); 

слово Строка в начале строки создает Локальная переменная с именем char1, которая является отдельной для глобального variabl e char1, который вы создаете в верхней части своей программы.

Вы должны удалить String, чтобы быть просто это ...

char1 = (String) extras.getString("char1"); 

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

+0

Что делает (String) часть? – user2498691

+0

В этом случае ничего. Это не совсем правильно, но для учебных целей бит '(String) говорит Java о том, что объект будет' String' - или, если его не задано 'String', он попытается изменить это к 'String'. Однако вызов 'extras.getString();' уже возвращает объект 'String', поэтому в этом случае он не нужен (но это тоже не так). – wattostudios

1

Вы уже объявили переменные глобальными, но позже вы указали локальную переменную с тем же именем. Вместо этого будет использоваться локальная переменная. Чтобы гарантировать, что глобальная переменная используется вместо этого, используйте ключевое слово «this».

this.char2 

относится к глобальному переменному char2

char2 

относится к локальному переменному char2