Перенос строки в новое действие + преобразование строки в целое число - PullRequest
0 голосов
/ 24 февраля 2012

Во-первых, я опубликую картинку, чтобы вам было легче понять, ребята.

enter image description here

Как видите, есть EditText и кнопка.Я хочу, чтобы кнопка сохраняла содержимое EditText в строку + запускала новое действие.

В следующем упражнении я хочу затем преобразовать строку в целое число.

Этомой текущий код:

Активность отправителя

        startscore = (EditText) findViewById(R.id.startscore);

proceed = (Button) findViewById(R.id.bProceed);
proceed.setOnClickListener(new OnClickListener() {

    public void onClick(View v) {

        Intent myIntent = new Intent(Introscreen.this, BillardScoreboardActivity.class);
        String s = startscore.getText().toString();
        Bundle b = new Bundle();
        b.putString("lol", s);
        //put into your intent
        myIntent.putExtras(b);
        Introscreen.this.startActivity(myIntent);

    }
}); 
}

Активность получателя

        int counter1, counter2, counter3, counter4, counter5;

            oncreate.....{

            Bundle b = getIntent().getExtras();
    String s = b.getString("lol");




    column1tv = (TextView) findViewById(R.id.column1text);
    column2tv = (TextView) findViewById(R.id.column2text);
    column3tv = (TextView) findViewById(R.id.column3text);
    column4tv = (TextView) findViewById(R.id.column4text);
    column5tv = (TextView) findViewById(R.id.column5text);

    column1tv.setText(counter1);
    column2tv.setText(counter2);
    column3tv.setText(counter3);
    column4tv.setText(counter4);
    column5tv.setText(counter5);

Надеюсь, что вы можете помочь мне в устранении неполадокэто, чтобы выяснить проблему.

Проблема:

При нажатии на кнопку, он закрывает приложение и дает мне эти коды ошибок:

02-23 15:01:24.136: E/AndroidRuntime(295): FATAL EXCEPTION: main

java.lang.RuntimeException: Unable to start activity
ComponentInfo{inno.games/inno.games.BillardScoreboardActivity}:
java.lang.NumberFormatException: unable to parse '' as integer

at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)

at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)

at android.app.ActivityThread.access$2300(ActivityThread.java:125)

at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)

at android.os.Handler.dispatchMessage(Handler.java:99)

at android.os.Looper.loop(Looper.java:123)

at android.app.ActivityThread.main(ActivityThread.java:4627)

at java.lang.reflect.Method.invokeNative(Native Method)

at java.lang.reflect.Method.invoke(Method.java:521)

at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)

at dalvik.system.NativeStart.main(Native Method)

Caused by: java.lang.NumberFormatException: unable to parse '' as integer

at java.lang.Integer.parseInt(Integer.java:412)

at java.lang.Integer.parseInt(Integer.java:382)

at inno.games.BillardScoreboardActivity.onCreate(BillardScoreboardActivity.java:35)

at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)

at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)

... 11 more

enter image description here

Ответы [ 4 ]

3 голосов
/ 24 февраля 2012

Он ломается при попытке преобразовать пустую строку в целое число.Что-то не так при передаче вашей строки в следующее действие.Попробуйте вместо этого передать дополнительную строку через пакет:

Bundle b = new Bundle();
b.putString("key", string);
//put into your intent
yourIntent.putExtras(b);

Затем получите ее в своем следующем упражнении:

Bundle b = getIntent().getExtras();
String s = b.getString("key");

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

Редактировать: Еще одна вещь.Я предполагаю, что вы только хотите, чтобы целые числа были введены в этот EditText.Вы должны установить inputType, если вы этого еще не сделали.

Редактировать 2: Не чувствовать себя отсталым, мы все были новичками в одной точке!Во-первых, попробуйте использовать пакет и посмотрите, правильно ли передается то, что вы вводите в свой EditText, следующей операции.

Во-вторых, вы устанавливаете inputType для EditText в вашем XML-файле.Должно быть что-то вроде android:inputType="number".

Декларации - это строки:

column1tv = (TextView) findViewById(R.id.column1text);

Вы создаете объект для ваших TextViews.Затем вы устанавливаете их здесь:

column1tv.setText(counter1);

Вы должны создать и создать экземпляр объекта, прежде чем сможете что-либо с ним делать.

Редактировать 3: Хорошо, со скриншота, который вы разместили, я собралследующее:

First- Вы создаете объекты counter1, counter2, etc.., но никогда не создаете их экземпляры чем-либо.Вероятно, именно здесь вы получаете свое последнее исключение.

Second- Вы получаете предупреждение о String s = b.getString("lol");, потому что это неиспользуемая локальная переменная.(Проверьте вкладку проблем в Eclipse, и вы увидите, какие предупреждения / проблемы у вас есть в вашем коде).Вы ничего не делаете со строковым значением, которое было передано из предыдущего действия.

1 голос
/ 24 февраля 2012

Попробуйте изменить порядок column1tv.setText (...) и column1tv = (TextView) findViewById (...).

// Assign new View to columnt1tv
column1tv = (TextView) findViewById(R.id.column1text); 

// change its appearance
column1tv.setText(counter1); 

Также вы хотите настроить массив R.id, чтобы вы могли просматривать эти повторяющиеся конструкции.

for( ... )
   columnTv[i] = (TextView) findByView( R_columnText[i] );

Упрощение с массивами коротких выборок.

class TheActivity extends Activity
{
    // Resource group id's
    private int R_columnTextIds[]={ R.id.column1text, R.id.column2text, 
               R.id.column3text, R.id.column4text};
    TextView columnTv[]= new TextView[4];
    // Now you can use loops.
    onCreate.... {
       .. get stuff and counter1
       for(int i = 0; i< columnTv.length; i++){
          columnTv[i] = (TextView) findByView( R_columnTextIds[i] );
          columnTv[i].setText( counter1 );
       }
0 голосов
/ 23 февраля 2012

Вы получаете startscore.getText().toString(), когда он, вероятно, пуст (сразу после получения EditText).Итак, строка, которую вы отправляете, это "".Попытайтесь получить его непосредственно перед

myIntent.putExtra("lol", s);

После того, как при получении активности вы можете проверить, например:

if(var != null && !TextUtils.isEmpty(var)) {
    // deal with var
}

Затем вы должны попробовать / перехватить операцию на Integer.parseInt () , потому что он может выдать NumberFormatException , если строка не является числом (это ваш случай, потому что var это "").

0 голосов
/ 23 февраля 2012

Ваша строка определенно передается в Intent правильно, потому что в противном случае i.getStringExtra("lol") вернет null, если эта пара имя-значение не существует. (Для вас было бы неплохо проверить, действительно ли полученный результат равен null, прежде чем пытаться проанализировать целое число из строки). Однако проблема, по-видимому, заключается в том, что передаваемая строка на самом деле является строкой нулевой длины, то есть "", что означает, что parseInt() падает при попытке проанализировать целое число из нее.

Похоже, что вам нужно сделать s non- final и добавить это в ваш слушатель кнопки непосредственно перед тем, как Intent будет запущен:

s = startscore.getText().toString();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...