Урок 9. Обработчики событий на примере Button.

Обсуждение уроков
HellKnight
Сообщения: 4
Зарегистрирован: 07 май 2014, 19:23

Re: Урок 9. Обработчики событий на примере Button.

Сообщение HellKnight » 08 май 2014, 16:37

Здравствуйте, подскажите пожалуйста, где может быть ошибка:

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

import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends ActionBarActivity {

	TextView text_hello;
	Button but_hi;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		if (savedInstanceState == null) {
			getSupportFragmentManager().beginTransaction()
					.add(R.id.container, new PlaceholderFragment()).commit();
		}
		text_hello = (TextView) findViewById(R.id.text_hello);
		but_hi = (Button) findViewById(R.id.but_hi);
		
		OnClickListener clickbut = new OnClickListener() {
			@Override
			public void onClick(View v) {
				text_hello.setText("ololo");
			}
		};
		but_hi.setOnClickListener(clickbut);
		
	}
Пробовал запускать на эмуляторе, но он на него даже устанавливать не хочет. Установил на реальное устройство (Android 4.1.2) - приложение вылетает, LogCat пишет такую штуку (привожу только последние строки):
  • 05-08 17:25:14.186: W/dalvikvm(9202): threadid=1: thread exiting with uncaught exception (group=0x40be3378)
    05-08 17:25:14.196: E/AndroidRuntime(9202): FATAL EXCEPTION: main
    05-08 17:25:14.196: E/AndroidRuntime(9202): java.lang.RuntimeException: Unable to start activity ComponentInfo{ru.hellknight.helloworld/ru.hellknight.helloworld.MainActivity}: java.lang.NullPointerException
    05-08 17:25:14.196: E/AndroidRuntime(9202): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2071)
    05-08 17:25:14.196: E/AndroidRuntime(9202): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2096)
    05-08 17:25:14.196: E/AndroidRuntime(9202): at android.app.ActivityThread.access$600(ActivityThread.java:138)
    05-08 17:25:14.196: E/AndroidRuntime(9202): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1207)
    05-08 17:25:14.196: E/AndroidRuntime(9202): at android.os.Handler.dispatchMessage(Handler.java:99)
    05-08 17:25:14.196: E/AndroidRuntime(9202): at android.os.Looper.loop(Looper.java:213)
    05-08 17:25:14.196: E/AndroidRuntime(9202): at android.app.ActivityThread.main(ActivityThread.java:4787)
    05-08 17:25:14.196: E/AndroidRuntime(9202): at java.lang.reflect.Method.invokeNative(Native Method)
    05-08 17:25:14.196: E/AndroidRuntime(9202): at java.lang.reflect.Method.invoke(Method.java:511)
    05-08 17:25:14.196: E/AndroidRuntime(9202): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
    05-08 17:25:14.196: E/AndroidRuntime(9202): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
    05-08 17:25:14.196: E/AndroidRuntime(9202): at dalvik.system.NativeStart.main(Native Method)
    05-08 17:25:14.196: E/AndroidRuntime(9202): Caused by: java.lang.NullPointerException
    05-08 17:25:14.196: E/AndroidRuntime(9202): at ru.hellknight.helloworld.MainActivity.onCreate(MainActivity.java:37)
    05-08 17:25:14.196: E/AndroidRuntime(9202): at android.app.Activity.performCreate(Activity.java:5008)
    05-08 17:25:14.196: E/AndroidRuntime(9202): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
    05-08 17:25:14.196: E/AndroidRuntime(9202): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2035)
    05-08 17:25:14.196: E/AndroidRuntime(9202): ... 11 more

    05-08 17:25:15.426: I/Process(9202): Sending signal. PID: 9202 SIG: 9
Сразу скажу, что про Java я знаю только поверхностно, откуда приходит NullPointerException - даже примерных соображений не имею. Если слепой, покажите пожалуйста, где я налажал. Если ошибка не связана с кодом, который я написал, подскажите, как устранить исключение. Если мной написанный код убрать, приложение работает (в том плане, что текст с кнопкой показывает, но действий никаких более не производит).

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 9. Обработчики событий на примере Button.

Сообщение Foenix » 08 май 2014, 16:57

по ссылке в подписи написано как узнать
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

HellKnight
Сообщения: 4
Зарегистрирован: 07 май 2014, 19:23

Re: Урок 9. Обработчики событий на примере Button.

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

Foenix писал(а):по ссылке в подписи написано как узнать
Благодарствую. Хотя у меня проблема оказалась такая же, как и у человека, которому Вы ответили в топике, на который сослались.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 9. Обработчики событий на примере Button.

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

я рада, что вы разобрались)
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Yurets
Сообщения: 48
Зарегистрирован: 06 май 2014, 19:07

Re: Урок 9. Обработчики событий на примере Button.

Сообщение Yurets » 01 июн 2014, 04:05

Всем привет!
Помогите, запутался и не могу разобраться...
есть поле EditText и есть массив char, где указаны буквы русского и английского алфавитов...
как дать массив на проверку в методе OnKeyListener...
или может кто знает как разрешить только символы из массива, а нажатия на другие символы просто игнорировать?


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

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnKeyListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class UserName extends Activity implements OnClickListener{
	
	Button btnOkName;
	EditText etName;
	String checkName;
	char[] letters = {'i', 'o', 'p', 'a', 's', 'd', 'f', 'g', 'h', 
			'j', 'k', 'l', 'z', 'x', 'q', 'w', 'e', 'r', 't', 'y', 
			'u', 'c', 'v', 'b', 'n', 'm', 
			'ё', 'й', 'ц','у', 'к', 'е','н', 'г', 'ш','щ', 'з', 'х','ъ',
			 'ф', 'ы','в', 'а', 'п','р', 'о', 'л','д', 'ж', 'э',
			'я', 'ч', 'с','м', 'и', 'т','ь', 'б', 'ю','ї', 'і', 'є'};

	@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.name);
        
        btnOkName = (Button)findViewById(R.id.btnOkName);
        btnOkName.setOnClickListener(this);
        
        etName = (EditText)findViewById(R.id.etName);
        
	}


	@Override
	public void onClick(View v) {
		
		checkName = etName.getText().toString();
		etName.setOnKeyListener(new OnKeyListener() {
			
			@Override
			public boolean onKey(View v, int keyCode, KeyEvent event) {
				for(int i = 0; i > 61; i++){
					if(letters[i] == KeyEvent.ACTION_DOWN){
						
					}else{
						
					}
				}
				return false;
			}
		});
		
		if(checkName.length() == 0){
			Toast.makeText(this, "Вы ничего не ввели!", Toast.LENGTH_SHORT).show();
		}else{
			Intent intentToStart = new Intent();
			intentToStart.putExtra("name", etName.getText().toString());
			setResult(RESULT_OK, intentToStart);
			finish();
		}
		
	}
}

Аватара пользователя
Leeroy
Сообщения: 67
Зарегистрирован: 12 дек 2013, 21:25

Re: Урок 9. Обработчики событий на примере Button.

Сообщение Leeroy » 01 июн 2014, 10:04

Yurets писал(а):Всем привет!
Помогите, запутался и не могу разобраться...
есть поле EditText и есть массив char, где указаны буквы русского и английского алфавитов...
как дать массив на проверку в методе OnKeyListener...
или может кто знает как разрешить только символы из массива, а нажатия на другие символы просто игнорировать?


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

...............{
				for(int i = 0; i > 61; i++){
					if(letters[i] == KeyEvent.ACTION_DOWN){	
					}else{	
					}
				}
				return false;
			}
		});

for(int i = 0; i > 61; i++) Цикл с одной итерацией?

Присмотрись к атрибутам EditText в xml

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

android:inputType=" ... "
Java Core -> JDBC -> GoF -> Android SDK ->...
Телепрограмма в твоем смарте Телепрограмма

Yurets
Сообщения: 48
Зарегистрирован: 06 май 2014, 19:07

Re: Урок 9. Обработчики событий на примере Button.

Сообщение Yurets » 01 июн 2014, 13:12

android:inputType=" ... " я уже пробовал, у меня после него вообще остался один большой вопрос... какой бы я тип не ставил - я могу вводить любые цифры, буквы, знаки О.о
цикл, конечно же, нет, это я уже в 4 утра пробовал как только можно)))
пробовал через inputFilter, но там всё к этому и сводиться...

Donart
Сообщения: 114
Зарегистрирован: 06 ноя 2013, 08:59

Re: Урок 9. Обработчики событий на примере Button.

Сообщение Donart » 01 июн 2014, 14:06

Yurets писал(а):пробовал через inputFilter, но там всё к этому и сводиться...
Зачем Вы проверяете checkName в onClick? Почему бы не установить inputFilter сразу на ввод данных в EditText.
if(letters == KeyEvent.ACTION_DOWN)

Что с чем сравниваете? KeyEvent.ACTION_DOWN это просто нажатие клавиши, а тут у Вас символы letters.
Да и не нужен Вам этот цикл, как и массив. Используйте регулярные выражения и ставьте фильтр на EditText.
[syntax=java]InputFilter inpf = new InputFilter() {

@Override
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
String Text = dest.toString() + source.toString();
String pattern = "[i, o]*"; // можно ввести только два символа
if (!Pattern.matches(pattern, Text)) {
return "";
}
return null;
}
};
et.setFilters(new InputFilter[] {inpf});
[/syntax]

Yurets
Сообщения: 48
Зарегистрирован: 06 май 2014, 19:07

Re: Урок 9. Обработчики событий на примере Button.

Сообщение Yurets » 01 июн 2014, 14:13

Во, разъяснили!
Спасибо огромное!!!

Fusion23
Сообщения: 1
Зарегистрирован: 20 июн 2014, 13:37

Re: Урок 9. Обработчики событий на примере Button.

Сообщение Fusion23 » 20 июн 2014, 13:46

Помогите разобраться нубу)

1) Зачем необходимо разделение на MainActivity и fragment_main?

2) Зачем в MainActivity прописывается строчка:

if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment())
.commit();

3) Не работает приложение именно после того как добавляю обработчик кнопке OK (btnOk)
btnOk.setOnClickListener(oclBtnOk);
"Приложение остановлено".

Исходник MainActivity:

public class MainActivity extends ActionBarActivity {

TextView tvOut;
Button btnOk;
Button btnCancel;

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

tvOut = (TextView) findViewById(R.id.tvOut);
btnOk = (Button) findViewById(R.id.btnOk);
btnCancel = (Button) findViewById(R.id.btnCancel);

OnClickListener oclBtnOk = new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
tvOut.setText("Нажата кнопка ОК");
}
};


if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment())
.commit();


}
}

В fragment_main прописано всё как в уроке. Что я делаю не правильно?

Donart
Сообщения: 114
Зарегистрирован: 06 ноя 2013, 08:59

Re: Урок 9. Обработчики событий на примере Button.

Сообщение Donart » 20 июн 2014, 18:12

Помогите разобраться нубу)
1) Самый популярный вопрос на форуме.
2) Это строка добавляет фрагмент и еще делает всякое :)
Ответ на первые два вопроса Вы найдете, в уроках по Fragment. А пока посмотрите видео
3) Потому что Вы ищете кнопку в activity_main, а потом пытаетесь повесить на нее слушатель. Если Вы используете фрагмент, то код из урока тоже нужно засунуть в класс PlaceholderFragment(или как он у Вас называется).

Аватара пользователя
starko22
Сообщения: 1
Зарегистрирован: 24 июн 2014, 21:52

Re: Урок 9. Обработчики событий на примере Button.

Сообщение starko22 » 02 июл 2014, 17:29

Здравствуйте.

Решил обратиться за помощью.

При запуске - ошибка "The application has stopped unexpectedly. Please Try again"

Сам код в MainActivity (ошибок видимых не вижу):

package com.example.p0091_ocb;

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;



public class MainActivity extends Activity {

TextView tvOut;
Button btnOk;
Button btnCancel;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// найдем View-элементы
tvOut = (TextView) findViewById(R.id.tvOut);
btnOk = (Button) findViewById(R.id.btnOk);
btnCancel = (Button) findViewById(R.id.btnCancel);

// создаем обработчик нажатия
OnClickListener oclBtnOk = new OnClickListener() {
@Override
public void onClick(View v) {
// Меняем текст в TextView (tvOut)
tvOut.setText("Нажата кнопка ОК");
}
};

// присвоим обработчик кнопке OK (btnOk)
btnOk.setOnClickListener(oclBtnOk);


// создаем обработчик нажатия
OnClickListener oclBtnCancel = new OnClickListener() {
@Override
public void onClick(View v) {
// Меняем текст в TextView (tvOut)
tvOut.setText("Нажата кнопка Cancel");
}
};
// присвоим обработчик кнопке Cancel (btnCancel)
btnCancel.setOnClickListener(oclBtnCancel);
}



@Override
public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, 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);
}

/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment {

public PlaceholderFragment() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
return rootView;
}
}

}

В fragment_main.xml (Здесь знаки восклицаний слева от android:text="...">:)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="30dp"
android:orientation="vertical">
<TextView
android:id="@+id/tvOut"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="50dp"
android:text="TextView">
</TextView>
<Button
android:id="@+id/btnOk"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="OK">
</Button>
<Button
android:id="@+id/btnCancel"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="Cancel">
</Button>
</LinearLayout>
</LinearLayout>

Может кто скажет как поправить?(Если вопрос очень простой или, еще хуже, тупой-извините..)

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 9. Обработчики событий на примере Button.

Сообщение Foenix » 02 июл 2014, 19:27

Сходи по второй ссылке в подписи.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 9. Обработчики событий на примере Button.

Сообщение klblk » 03 июл 2014, 06:59

Foenix писал(а):Сходи по второй ссылке в подписи.
Нужна еще третья ссылка в подписи "Как оформлять код на форуме" =)
чтобы сразу половину людей можно было бы на твою подпись ссылать)

Genjinakamuro
Сообщения: 2
Зарегистрирован: 13 авг 2014, 13:22

Re: Урок 9. Обработчики событий на примере Button.

Сообщение Genjinakamuro » 13 авг 2014, 13:22

Не могу понять в чем проблема.
Вложения
Снимок.PNG
Снимок.PNG (30.95 КБ) 11265 просмотров

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 9. Обработчики событий на примере Button.

Сообщение Foenix » 13 авг 2014, 13:36

klblk писал(а):
Foenix писал(а):Сходи по второй ссылке в подписи.
Нужна еще третья ссылка в подписи "Как оформлять код на форуме" =)
чтобы сразу половину людей можно было бы на твою подпись ссылать)
да там блин длина подписи ограничена :) Пришлось вставить эти ссылки и убрать требование не писать вопросов в личку )) Хотя что было это требование, что нет - все равно пишут.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 9. Обработчики событий на примере Button.

Сообщение Foenix » 13 авг 2014, 13:37

Genjinakamuro писал(а):Не могу понять в чем проблема.
так и не поймешь, если просто будет глазеть на эту картину. Мышь подведи, что пишет почитай..
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Genjinakamuro
Сообщения: 2
Зарегистрирован: 13 авг 2014, 13:22

Re: Урок 9. Обработчики событий на примере Button.

Сообщение Genjinakamuro » 13 авг 2014, 13:58

Foenix писал(а):
Genjinakamuro писал(а):Не могу понять в чем проблема.
так и не поймешь, если просто будет глазеть на эту картину. Мышь подведи, что пишет почитай..
Я только сейчас понял что в OnCreate создал еще один MainActivity. Господи два дня пытался понять в чем тут проблема)))

Федор
Сообщения: 7
Зарегистрирован: 18 авг 2014, 14:57

Re: Урок 9. Обработчики событий на примере Button.

Сообщение Федор » 18 авг 2014, 15:01

Скажите пожалуйста,если я хочу чтобы по нажатию кнопки изменялся TextView не на одну фразу а на несколько и желательно рандомно что я должен добавить в код ?

Федор
Сообщения: 7
Зарегистрирован: 18 авг 2014, 14:57

Re: Урок 9. Обработчики событий на примере Button.

Сообщение Федор » 22 авг 2014, 09:58

лююююди тут живые есть ?

Ответить