Проблема с глобальными переменными

Ответить
kiryasolod
Сообщения: 2
Зарегистрирован: 08 май 2014, 19:32

Проблема с глобальными переменными

Сообщение kiryasolod » 08 май 2014, 19:38

Привет всем знатокам android! Я только начал изучать эту систему и пока не в зуб ногой в нее почти =) Возникла проблема: при объявлении любых переменных вне методов и процедур выкидывает из приложения, при чем синтаксических ошибок или даже предупреждений нет =( Уже несколько дней мучаюсь с этой проблемой. Подскажите пожалуйста. Вот код:

Код: Выделить всё

package org.example.sudoku;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.Switch;
import android.widget.TextView;


public class Sudoku extends Activity {

	TextView MainCaption = (TextView) findViewById(R.id.textView1);
	TextView Position = (TextView) findViewById(R.id.textView2);
 	Button Button1 = (Button) findViewById(R.id.button1);
 	Button Button2 = (Button) findViewById(R.id.button2);
 	SeekBar seekbar1 = (SeekBar) findViewById(R.id.seekBar1);
 	Switch switch1 = (Switch) findViewById(R.id.Switch1);
 	OnCheckedChangeListener check = new OnCheckedChangeListener() {
			
			@Override
			public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
				// TODO Auto-generated method stub
				if (switch1.isChecked())
			Position.setBackgroundColor(getResources().getColor(R.color.Color1))	;
				else Position.setBackgroundColor(getResources().getColor(R.color.Color2)); 
			}
		};

 	private OnSeekBarChangeListener seekchange = new OnSeekBarChangeListener() {
			


			@Override
			public void onStopTrackingTouch(SeekBar arg0) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void onStartTrackingTouch(SeekBar arg0) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
				// TODO Auto-generated method stub
				Position.setText("Position = \""+seekbar1.getProgress()+"\"");
			}
		};
 	private OnClickListener listener = new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				switch (v.getId()) {
				case R.id.button1:
					MainCaption.setText("Button \""+Button1.getText()+"\" pressed!");;
					break;
				case R.id.button2:
					MainCaption.setText("Button \""+Button2.getText()+"\" pressed!");
					break;
				

				}
			}
		};        	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sudoku);

       
MainCaption.setText("123");
Button1.setOnClickListener(listener);
Button2.setOnClickListener(listener);
seekbar1.setOnSeekBarChangeListener(seekchange);
switch1.setOnCheckedChangeListener(check);

        
    }



@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.sudoku, menu);
        return true;
       
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

}

kiryasolod
Сообщения: 2
Зарегистрирован: 08 май 2014, 19:32

Re: Проблема с глобальными переменными

Сообщение kiryasolod » 08 май 2014, 20:13

Проблему с выкидыванием решил. Объявил переменные, но не приравнивал их ни к чему. Приравнял только в onCreate. Отсюда вопрос: можно ли сразу инициализировать переменную в классе, если да, то как это правильно сделать? По синтаксису вроде все правильно, но при проверке приложение закрывается =(

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Проблема с глобальными переменными

Сообщение Mikhail_dev » 09 май 2014, 10:28

Отсюда вопрос: можно ли сразу инициализировать переменную в классе, если да, то как это правильно сделать?
Инициализировать можно, а результат может быть разным. Инициализировать можно вот так
{
инициализируем тут переменные
}

или же
static {
инициализируем тут переменные
}

но вот это инициализировать
[syntax=java5]
TextView MainCaption = (TextView) findViewById(R.id.textView1);
TextView Position = (TextView) findViewById(R.id.textView2);
Button Button1 = (Button) findViewById(R.id.button1);
Button Button2 = (Button) findViewById(R.id.button2);
SeekBar seekbar1 = (SeekBar) findViewById(R.id.seekBar1);
Switch switch1 = (Switch) findViewById(R.id.Switch1);
[/syntax]
у вас не получится, потому что у вас еще нет доступного UI, откуда вы черпаете свои данные (R.id.textView1 и т.д.). Он еще не родился, а вы к нему обращаетесь. Делайте это в onCreate

Ответить