Урок 30. Подробнее про onActivityResult. Зачем нужны requestCode и resultCode

Обсуждение уроков
vozup
Сообщения: 9
Зарегистрирован: 23 июл 2013, 20:16

Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req

Сообщение vozup » 26 июл 2013, 17:52

Капец, как я просмотрел?Вот спасибо большое!

Ckapa
Сообщения: 3
Зарегистрирован: 04 сен 2013, 20:28

Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req

Сообщение Ckapa » 14 сен 2013, 00:17

Всем привет.
Наконец-то мои нервы не выдержали и я решил обратиться на форум. Потому как сам я не понимаю в чем проблема.

Конкретно урок 30, да и большинство предыдущих, раздражает меня такими проблемами:
- Даже при копипасте, выдает какие-то ошибки, которые рандомно появляются и пропадают, тем самым не давая мне запустить приложение на эмуляторе. Одна из наиболее частых, появляется в xml - после закрытия линеар лайаута, выдает нечто похожее на "неожиданный конец".

- Конкретно в этом уроке, у меня только после 4 копипаста (до этого набирал) приняло без ошибки REQUEST_CODE - ошибка REQUEST_CODE_ALIGN cannot be resolved to a variable.

- В строчке Log.d("myLogs", "requestCode = " + requestCode + ", resultCode = " + resultCode); пишет
Log cannot be resolved.

- В строчке int color = data.getIntExtra("color", Color.WHITE); - пишет Color cannot be resolved to a variable, так же и Align.

-Эта строчка Toast.makeText(this, "Wrong result", Toast.LENGTH_SHORT).show(); радует меня этим - Multiple markers at this line
- Toast cannot be resolved
- Toast cannot be resolved to a

- case R.id.btnLeft: - case expressions must be constant expressions.


Прошу, объясните в чем дело. Серия копипастов исправляет не все проблемы. Как исправить их я не знаю. Надеюсь вы сбережете мои нервы своими знаниями.

tav
Сообщения: 14
Зарегистрирован: 23 авг 2013, 12:48

Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req

Сообщение tav » 14 сен 2013, 18:20

Ckapa, может быть не копипастятся все импорты?

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

import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req

Сообщение neoksi » 14 сен 2013, 18:42

Копи-паст без осознания, чего и как работает, плохая идея.

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

Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req

Сообщение Foenix » 15 сен 2013, 11:04

Объясняю. Нужно повторять все вручную.

Твои ошибки объясняются тем, что у тебя возникает какая-то ошибка в xml файле (а это запросто при копипасте), поэтому R не образуется, а раз он не образуется, то будут выдаваться ошибки в коде при обращении к ресурсам R.
R.id.team

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

Ckapa
Сообщения: 3
Зарегистрирован: 04 сен 2013, 20:28

Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req

Сообщение Ckapa » 19 сен 2013, 02:39

Я сначала набираю все от руки!! ПОтом когда ошибки меня достают я начинаю копипастить. Ошибки возникают из воздуха (я по буковке сверял с текстом урока). Так что не в копипасте дело.

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

Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req

Сообщение Foenix » 19 сен 2013, 12:30

там есть лог, смотри ошибки там, иногда на ошибки в xml указываются там
R.id.team

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

SHD
Сообщения: 1
Зарегистрирован: 11 окт 2013, 17:27

Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req

Сообщение SHD » 11 окт 2013, 17:41

Подскажите, не могу придумать
Задача: рядом с кнопками цвета сделать Edit Text и при нажатии кнопки ОК считывался (видимо текст) например MAGENTA, потом присваивался передаваемому значению.
И в итоге получали свет текста заданного ручками.
возможно глупая затея, но все же.
Спасибо

Grom-131
Сообщения: 1
Зарегистрирован: 28 фев 2014, 12:22

Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req

Сообщение Grom-131 » 28 фев 2014, 12:25

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

if (resultCode == RESULT_OK) {
	switch (requestCode) {
	case REQUEST_CODE_COLOR:
		int color = data.getIntExtra("color", Color.WHITE);
		tvText.setTextColor(color);
		break;
	case REQUEST_CODE_ALIGN:
		int align = data.getIntExtra("alignment", Gravity.LEFT);
		tvText.setGravity(align);
		break;
}
Как выглядел бы код, если не ставить по умолчанию Color.WHITE и Gravity.LEFT?

Enero
Сообщения: 3
Зарегистрирован: 13 апр 2014, 00:31

Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req

Сообщение Enero » 17 апр 2014, 04:34

Пошел другим путем и реализовал ColorActivity через SeekBar'ы, а AlignActivity в диалоговом окне через RadioButton. Поймал себя на мысли, что и про первую и про вторую упоминалось вскользь на занятиях и забывается моментально (в отличии от OnClickListener, который уже от зубов отскакивает :-) ).

Можно как домашку к этому уроку смело давать, с пометкой, что значение цвета - это int, а задать цвет можно командой Color.rgb(красный, зеленый, синий).

rakedko
Сообщения: 3
Зарегистрирован: 18 апр 2014, 15:00

Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req

Сообщение rakedko » 04 май 2014, 12:49

Что то не получается код в строчке tvText.setGravity
и принудительно ставил tvText.setGravity(Gravity.CENTER), а он не выполняет это строчку...

Аватара пользователя
Don77
Сообщения: 13
Зарегистрирован: 02 июл 2014, 00:21

Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req

Сообщение Don77 » 23 июл 2014, 17:13

Метод setGravity не изменяет позицию строки, пришлось инициализировать LinearLayout и уже ей присваивать константу из класса Gravity.
Хмм... и если попробовать сменить позицию элемента (вложенного в LinearLayout) непосредственно в xml файле, она не изменится.

Аватара пользователя
GOST
Сообщения: 16
Зарегистрирован: 25 июл 2014, 12:37
Откуда: UA

Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req

Сообщение GOST » 31 июл 2014, 11:37

Don77 писал(а):Метод setGravity не изменяет позицию строки, пришлось инициализировать LinearLayout и уже ей присваивать константу из класса Gravity.
Хмм... и если попробовать сменить позицию элемента (вложенного в LinearLayout) непосредственно в xml файле, она не изменится.
Та же ситуация, да и в Properties TextView нету ничего связанного выравниванием текста.

chebarasha
Сообщения: 2
Зарегистрирован: 30 сен 2014, 23:00

Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req

Сообщение chebarasha » 30 сен 2014, 23:10

Привет всем!

Вопрос, почему к TextView не применяется alignment? Из активити все возвращается, в логах ошибок нет, смотрю на код и не могу понять, где я недоглядел.

AlignmentActivity.xml

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

package ru.chebe.p0301_activityresult;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class AlignmentActivity extends Activity implements OnClickListener {
	
	Button btnLeft, btnCenter, btnRight;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView( R.layout.layout_align );
		
		btnLeft = (Button)findViewById(R.id.btnLeft );
		btnLeft.setOnClickListener(this);
		
		btnCenter = (Button)findViewById(R.id.btnCenter );
		btnCenter.setOnClickListener(this);
		
		btnRight = (Button)findViewById(R.id.btnRight );
		btnRight.setOnClickListener(this);
	}
	
	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		Intent intent = new Intent();
		switch( v.getId() ) {
			case R.id.btnLeft:
				intent.putExtra("alignment", Gravity.LEFT);
				break;
			case R.id.btnCenter:
				intent.putExtra("alignment", Gravity.CENTER);
				break;
			case R.id.btnRight:
				intent.putExtra("alignment", Gravity.RIGHT);
				break;
		}
		setResult(RESULT_OK, intent);
		finish();
		
	}
}
MainActivity.xml

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

package ru.chebe.p0301_activityresult;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {
	
	Button btnColor, btnAlign;
	TextView tvText;
	
	final int REQUEST_CODE_COLOR = 1, REQUEST_CODE_ALIGNMENT = 2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        btnColor = (Button) findViewById( R.id.btnColor );
        btnColor.setOnClickListener(this);
        
        btnAlign = (Button) findViewById( R.id.btnAlign );
        btnAlign.setOnClickListener(this);
        
        tvText = (TextView) findViewById( R.id.tvText );
    }
    
    @Override
    public void onClick(View v) {
    	// TODO Auto-generated method stub
    	Intent intent;
    	
    	switch( v.getId() ) {
    	case R.id.btnColor:
    		intent = new Intent(this, ColorActivity.class);
    		startActivityForResult(intent, REQUEST_CODE_COLOR);
    		break;
    	case R.id.btnAlign:
    		intent = new Intent(this, AlignmentActivity.class);
    		startActivityForResult(intent, REQUEST_CODE_ALIGNMENT);
    		break;
    	}
    }
    
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    	// TODO Auto-generated method stub
    	if( resultCode == RESULT_OK ) {
    		switch( requestCode ) {
	    		case REQUEST_CODE_COLOR:
	    			int color = data.getIntExtra("color", Color.BLACK);
	    			tvText.setTextColor(color);
	    			break;
	    		case REQUEST_CODE_ALIGNMENT:
	    			int alignment = data.getIntExtra("alignment", Gravity.CENTER);
	    			tvText.setGravity(alignment);
	    			break;
    		}
    	} else {
    		Toast.makeText(this, "Wrong result!", Toast.LENGTH_SHORT).show();
    	}
    	
    	super.onActivityResult(requestCode, resultCode, data);
    }
}

UPD Разобрался! В layout файле у TextView стояло:

android:layout_width="wrap_content"
android:layout_gravity="center_horizontal"

заменил на

android:layout_width="match_parent"
android:gravity="center"

Радислав Гандопас
Сообщения: 9
Зарегистрирован: 29 апр 2015, 09:47

Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req

Сообщение Радислав Гандопас » 06 май 2015, 15:43

При нажатии кнопок, относящихся к ActivitColor, метод setResult возвращает RESULT_OK равный 1 (видно по логам) т.е. все как показано на скринах. А вот при нажатии кнопок выравнивания, логи показывают resultCode = 2, а на скринах тоже должно быть 1, но при этом все работает. Я так понимаю RESULT_OK может возвращать только 0 и 1? почему же у меня 2?

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req

Сообщение doter.ua » 06 май 2015, 16:40

Радислав Гандопас писал(а):При нажатии кнопок, относящихся к ActivitColor, метод setResult возвращает RESULT_OK равный 1 (видно по логам) т.е. все как показано на скринах. А вот при нажатии кнопок выравнивания, логи показывают resultCode = 2, а на скринах тоже должно быть 1, но при этом все работает. Я так понимаю RESULT_OK может возвращать только 0 и 1? почему же у меня 2?
Не путай с реквест кодом.

requestCode – это в некотором роде ID запроса. Задается в методе startActivityForResult, и проверяется потом в onActivityResult, чтобы точно знать, на какой вызов пришел ответ.

resultCode – статус вызова. Задается в методе setResult, и проверяется в onActivityResult, чтобы понять насколько успешно прошел вызов. Если при вызове что-то пошло не так, то вернется системная константа RESULT_CANCELED.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

dmitres
Сообщения: 5
Зарегистрирован: 04 фев 2016, 15:52

Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req

Сообщение dmitres » 04 фев 2016, 15:54

Возможно ли в вызываемой форме (activity) узнать requestCode т.е. код с которым она была вызвана?

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req

Сообщение doter.ua » 05 фев 2016, 13:08

dmitres писал(а):Возможно ли в вызываемой форме (activity) узнать requestCode т.е. код с которым она была вызвана?
Обычно такие активити выполняют какое-то одно действие и необходимости в реквест коде нету. Можно самому добавить код через интент http://stackoverflow.com/a/5104476 , а вообще стоит задуматься о декомпозиции своего "швейцарского ножа" на отдельные активити, во избежание вермишели в коде.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

dmitres
Сообщения: 5
Зарегистрирован: 04 фев 2016, 15:52

Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req

Сообщение dmitres » 05 фев 2016, 22:00

doter.ua писал(а):
dmitres писал(а):Возможно ли в вызываемой форме (activity) узнать requestCode т.е. код с которым она была вызвана?
Обычно такие активити выполняют какое-то одно действие и необходимости в реквест коде нету. Можно самому добавить код через интент http://stackoverflow.com/a/5104476 , а вообще стоит задуматься о декомпозиции своего "швейцарского ножа" на отдельные активити, во избежание вермишели в коде.
Действий всего 2: create item, edit item. Решил через setType().

ilkarvet89@gmail.com
Сообщения: 1
Зарегистрирован: 27 сен 2016, 09:06

Re: Урок 30. Подробнее про onActivityResult. Зачем нужны req

Сообщение ilkarvet89@gmail.com » 27 сен 2016, 09:28

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

Ответить