Почему моя кнопка приводит к сбою моего приложения?

У меня проблема, когда я нажимаю кнопку, чтобы сохранить информацию EditText в строку, приложение падает, и я не могу найти никаких проблем, я что-то неправильно устанавливаю и просто не вижу этого?

public class Tab5 extends Activity {

Button btnGo ;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.tab5);

    btnGo = (Button) findViewById(R.id.button1);


    btnGo.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) { 


            // TODO Auto-generated method stub
            EditText userid = (EditText) findViewById(R.id.editText1);
            userid.setText(2);
            Intent intent = new Intent(Tab5.this, Tab1.class);
            userid.getText().toString();
            startActivity(intent);
                        }
                    });

}
}

person bumbob    schedule 09.05.2014    source источник
comment
Пожалуйста, взгляните на этот вопрос.   -  person nhaarman    schedule 09.05.2014
comment
EditText предназначен для получения ввода от пользователя. Так что нет смысла устанавливать для него значение. Сначала создайте экземпляр за пределами вашего onClick(), затем нажмите кнопку, чтобы получить текст, введенный userid.getText().toString(); которые вы можете использовать позже. В данный момент он не используется.   -  person Atul O Holic    schedule 09.05.2014
comment
@AtulOHolic, что я делаю неправильно, что не получаю текст при нажатии кнопки   -  person bumbob    schedule 09.05.2014
comment
setText() примет String, однако 2 - это int, поэтому вам нужно будет либо сделать String.valueOf(2), либо 2. Но мне любопытно узнать, почему вы хотите это сделать, если вы сами хотите setText, тогда вы делаете это напрямую зачем использовать EditText?   -  person Atul O Holic    schedule 09.05.2014
comment
@AtulOHolic Я запускаю приложение веб-просмотра с вкладками с разными веб-представлениями на каждой вкладке, однако все URL-адреса веб-просмотра заканчиваются на ?id=*, и я хочу, чтобы все, что они вводят, было значением * и имело 2 в качестве загрузки по умолчанию , как это проще всего сделать?   -  person bumbob    schedule 09.05.2014


Ответы (4)


Вы можете назначить ?id= переменной как

public final static String URL = "outputapps.com/build/infoview.php?id=";

а затем можно объединить значение EditText, но, как вы сказали, вам нужно 2 по умолчанию, нам придется сначала проверить EditText, содержит ли он какой-либо текст или нет. СДЕЛАЙТЕ это Tab5

Intent intent = new Intent(Tab5.this, Tab1.class);
String edit = userid.getText().toString();
String myURL = null;
if(edit != null && edit.length > 0){
    myURL = edit;
}else{
    myURL = "2";
}
intent.putExtra("EXTRA_URL", myURL);
startActivity(intent);

затем для загрузки URL-адреса сделайте это на вкладке 1,

String myURL = getIntent().getStringExtra("EXTRA_URL");
webView.loadUrl(YourActivity.URL + myURL);

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

person Atul O Holic    schedule 09.05.2014
comment
URL-адрес находится в другом действии, как бы я использовал это в этом параметре private WebView webView; public void onCreate (Bundle saveInstanceState) { super.onCreate (savedInstanceState); setContentView (R.layout.tab1); webView = (WebView) findViewById(R.id.webView1); webView.getSettings().setJavaScriptEnabled(true); Намерение намерение = getIntent(); webView.loadUrl(outputapps.com/build/infoview.php?id=) ; webView.setWebViewClient (новый MyAppWebViewClient()); } }' - person bumbob; 10.05.2014
comment
вы можете передать URL-адрес в качестве дополнительного намерения и, если он исправлен, то есть всегда будет одинаковым, тогда вы можете создать его как статическую строку и получить доступ непосредственно как Classname.url, где бы вы ни находились. В этом случае сохраните публичный доступ. Смотрите, я отредактировал приведенный выше URL-адрес в нужном вам действии. - person Atul O Holic; 10.05.2014
comment
я продолжаю путаться или что-то в этом роде, большое спасибо за всю эту помощь, я понятия не имею, почему это не работает, вот несколько снимков экрана с кодом gyazo.com/dcf4e7296500a101f787c31306799019, где веб-просмотр должен вытащить переменную, и здесь текст редактирования gyazo.com/710aefbd3d6948bdc8392bc777cde55a - person bumbob; 10.05.2014
comment
Пожалуйста, не убивайте меня за неправильное имя переменной. final - это ключевое слово и, следовательно, проблема, измените его на что-то еще, например final_URL или что-то в этом роде. :) - person Atul O Holic; 10.05.2014
comment
Я отредактировал свой ответ, чтобы дополнительно объяснить, как мы можем передать вашу строку с Tab5 на Tab1 с помощью намерения. - person Atul O Holic; 10.05.2014
comment
если бы вы могли помочь мне, я столкнулся с другой проблемой stackoverflow.com/questions/23638780/ - person bumbob; 13.05.2014

Если вы сделаете

userid.setText(2);

Android будет думать об этом объявлении как об идентификаторе ресурса и не найдет его в R.java.

Так что просто не забывайте всегда передавать String методу setText

userid.setText(String.valueOf(2));

or

userid.setText(""+2);
person Enrichman    schedule 09.05.2014

использовать

 userid.setText("2");

вместо

 userid.setText(2);
person Santosh Kathait    schedule 09.05.2014
comment
Хорошо, поэтому в моем приложении у меня есть 5 разных веб-просмотров на разных вкладках, все URL-адреса заканчиваются на ?id=, и я хочу, чтобы идентификатор совпадал с тем, что я набираю, при нажатии кнопки я хочу, чтобы он обновлял все веб-просмотры, но теперь когда я нажимаю кнопку (которая, кстати, исправила это, спасибо), он просто открывает новый веб-просмотр и избавляется от моего табулятора? - person bumbob; 09.05.2014
comment
См. это для справки: stackoverflow.com/questions/13542982 / - person Atul O Holic; 09.05.2014
comment
Если ответ поможет вам проголосовать за них, он может помочь и другим, и в любом случае я не понимаю, чего именно вы хотите... пожалуйста, введите код - person Santosh Kathait; 09.05.2014

Вы устанавливаете int для EditText. Преобразуйте int в строку. Попробуйте это:

Используйте +, оператор конкатенации строк:

ed = (EditText) findViewById (R.id.box);
int x = 10;
ed.setText(""+x);

или используйте String.valueOf(int):

ed.setText(String.valueOf(x));

или используйте Integer.toString(int):

ed.setText(Integer.toString(x))
person Gustavo Bitencourt    schedule 09.05.2014