0

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

01-22 17:37:43.925: I/Process(443): Sending signal. PID: 443 SIG: 9 
01-22 17:52:47.395: D/dalvikvm(480): GC_EXTERNAL_ALLOC freed 42K, 53% free 2550K/5379K, external 1625K/2137K, paused 48ms 
01-22 17:53:01.145: W/KeyCharacterMap(480): No keyboard for id 0 
01-22 17:53:01.145: W/KeyCharacterMap(480): Using default keymap: /system/usr/keychars/qwerty.kcm.bin 
01-22 17:53:02.205: D/AndroidRuntime(480): Shutting down VM 
01-22 17:53:02.205: W/dalvikvm(480): threadid=1: thread exiting with uncaught exception (group=0x40015560) 
01-22 17:53:02.225: E/AndroidRuntime(480): FATAL EXCEPTION: main 
01-22 17:53:02.225: E/AndroidRuntime(480): java.lang.NumberFormatException: unable to parse 'null' as integer 
01-22 17:53:02.225: E/AndroidRuntime(480): at java.lang.Integer.parseInt(Integer.java:356) 
01-22 17:53:02.225: E/AndroidRuntime(480): at java.lang.Integer.parseInt(Integer.java:332) 
01-22 17:53:02.225: E/AndroidRuntime(480): at com.ciltild.mtgcardsandrules.PlayerTools.setAlertVar(PlayerTools.java:81) 
01-22 17:53:02.225: E/AndroidRuntime(480): at com.ciltild.mtgcardsandrules.PlayerTools$1.onClick(PlayerTools.java:41) 
01-22 17:53:02.225: E/AndroidRuntime(480): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:159) 
01-22 17:53:02.225: E/AndroidRuntime(480): at android.os.Handler.dispatchMessage(Handler.java:99) 
01-22 17:53:02.225: E/AndroidRuntime(480): at android.os.Looper.loop(Looper.java:123) 
01-22 17:53:02.225: E/AndroidRuntime(480): at android.app.ActivityThread.main(ActivityThread.java:3683) 
01-22 17:53:02.225: E/AndroidRuntime(480): at java.lang.reflect.Method.invokeNative(Native Method) 
01-22 17:53:02.225: E/AndroidRuntime(480): at java.lang.reflect.Method.invoke(Method.java:507) 
01-22 17:53:02.225: E/AndroidRuntime(480): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
01-22 17:53:02.225: E/AndroidRuntime(480): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
01-22 17:53:02.225: E/AndroidRuntime(480): at dalvik.system.NativeStart.main(Native Method) 

Ниже приведен код для предупреждения диалога:

@Override 
protected Dialog onCreateDialog(int id){ 
    switch(id){ 

    case playerLifeDialog: 
     LayoutInflater factory = LayoutInflater.from(this); 
     final View playerSetLifeView = factory.inflate(R.layout.toolslifedialog, null); 
     return new AlertDialog.Builder(PlayerTools.this) 
      .setTitle("Set Life to:") 
      .setView(playerSetLifeView) 
      .setPositiveButton("Add", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int addButton) { 
        setAlertVar(toolsDialogText); 
        tempLifeVar = alertVar + playerLifeVar; 
       } 
      }) 
      .setNegativeButton("Subtract", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int setButton) { 
        setAlertVar(toolsDialogText); 
        tempLifeVar = playerLifeVar - alertVar; 
       } 
      }) 
      .setNeutralButton("Set", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int subButton) { 
        setAlertVar(toolsDialogText); 
        tempLifeVar = alertVar; 
       } 
      }) 
      .create(); 
     default: 
    } 
    return null; 
} 

Я провел неделю глядя на вопросы, другие просили и на разработчиков документ Google, чтобы попытаться выяснить это. Если бы я знал больше о Java, я уверен, что это будет не так сложно. Но я слишком долго задерживался на этом. Кроме того, это моя вторая попытка создания этого приложения. Любая помощь будет очень высоко ценится.

Это код setAlertVar:

public void setAlertVar(String toolsDialogText) throws NumberFormatException{ 
    alertVar = Integer.parseInt(toolsDialogText); 
} 

ответ

0

где устанавливают значение для toolsDialogText перед передачей его в setAlertVar (toolsDialogText);

Так что, если вы не установить его, то имея нулевое значение, которое не может быть разобраны классом Integer ... лучше проверить для

` если (! TextUtil.isEmpty (toolsDialogText)) {

alertVar = Integer.parseInt (toolsDialogText);

}

возвращение alertVar; `

+0

Я думаю, мне нужно выяснить, как вернуть строку из EditText –

+0

editText.getText(). ToString() –

+0

В R.layout.toolslifedialog это EditText с id toolsDialogInput –

0

Ваша проблема заключается в методе setAlertVar(), в строке 81 (это трудно сказать что-либо еще без кода setAlertVar()):

at com.ciltild.mtgcardsandrules.PlayerTools.setAlertVar(PlayerTools.java:81) 

Если вы знаете, что у вас могут быть недопустимые номера, попробуйте окружить код, который выбрасывает исключение выше:

try { 
    int b = Integer.parseInt(string); 
} catch (Exception e) { 
    //handle the exception if necessary 
} 
+0

Я попытался, что в предыдущей версии Кодекса и сделал то же самое, за исключением возвращения исключения нулевого указателя. –