0

これが私が作成しようとしている最初のアプリであることをみんなに知らせたいだけです。ですから、愚かな質問をした場合は、お詫び申し上げます。後でアプリで使用するために番号を返すアラートダイアログを作成しようとしています。ダイアログはエミュレーターに表示されますが、オプションの1つを選択すると、アプリがクラッシュします。

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開発者のドキュメントを調べてこれを理解しようと1週間を費やしました。Javaについてもっと知っていれば、これはそれほど難しいことではないと確信しています。しかし、私はこれに長い間立ち往生しています。また、これはこのアプリを作成するための私の2回目の試みです。どんな助けでも大歓迎です。

これはsetAlertVarコードです:

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

2 に答える 2

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
}
于 2012-01-23T00:03:32.650 に答える
0

setAlertVar(toolsDialogText);に渡す前に、toolsDialogTextの値を設定しています。

したがって、設定していない場合は、Integerクラスで解析できないnull値があります...

`if(!TextUtil.isEmpty(toolsDialogText)){

alertVar = Integer.parseInt(toolsDialogText);

}

alertVarを返します;`

于 2012-01-23T00:49:42.897 に答える