有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安卓 java。lang.NumberFormatException:对于输入字符串:“null”

我不断地发现这个错误:( 错误出现在Donasi。阶级

这是Donasi的课堂:

 int total = 0;
    for (Transaksi transaksi:donasi)
        total += (Integer.parseInt(transaksi.getMinimal()))*(Integer.parseInt(transaksi.getQuantity()));
        Locale locale = new Locale("in", "ID");
        NumberFormat fmt = NumberFormat.getCurrencyInstance(locale);
        txtTotalDonasi.setText(fmt.format(total));

这是类DonationAdapter:

    int minimal = (Integer.parseInt(listData.get(position).getMinimal()))*(Integer.parseInt(listData.get(position).getQuantity()));

    holder.txt_minimal.setText(fmt.format(minimal));

    holder.txt_nama_donasi.setText(listData.get(position).getNamaDonasi());

这是我的日志:

12-28 14:20:36.283 2579-2579/da.glowroz.donationapp E/AndroidRuntime: FATAL EXCEPTION: main
     Process: da.glowroz.donationapp, PID: 2579
     java.lang.RuntimeException: Unable to start activity ComponentInfo{da.glowroz.donationapp/da.glowroz.donationapp.Donasi}: java.lang.NumberFormatException: For input string: "null"
at 安卓.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
at 安卓.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
at 安卓.app.ActivityThread.-wrap12(ActivityThread.java)
at 安卓.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
at 安卓.os.Handler.dispatchMessage(Handler.java:102)
at 安卓.os.Looper.loop(Looper.java:154)
at 安卓.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:755)
Caused by: java.lang.NumberFormatException: For input string: "null"
at java.lang.Integer.parseInt(Integer.java:521)
at java.lang.Integer.parseInt(Integer.java:556)
at da.glowroz.donationapp.Donasi.loadListDonasi(Donasi.java:134)
at da.glowroz.donationapp.Donasi.onCreate(Donasi.java:72)
at 安卓.app.Activity.performCreate(Activity.java:6662)
at 安卓.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
at 安卓.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)
at 安卓.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 
at 安卓.app.ActivityThread.-wrap12(ActivityThread.java) 
at 安卓.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) 
at 安卓.os.Handler.dispatchMessage(Handler.java:102) 
at 安卓.os.Looper.loop(Looper.java:154) 
at 安卓.app.ActivityThread.main(ActivityThread.java:6077) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:755) 

如何解决这个问题


共 (4) 个答案

  1. # 1 楼答案

    Caused by: java.lang.NumberFormatException: For input string: "null"
    

    NumberFormatException is an Exception that might be thrown when you try to convert a String into a number, where that number might be an int , a float , or any other Java numeric type

    你正在变得越来越坚强。这不是int。添加检查

    total += (Integer.parseInt(transaksi.getMinimal()))*(Integer.parseInt(transaksi.getQuantity())); // Problem coming from this end
    

    ^{}你的应用程序。在total旁边添加断点

    添加try-catch

    try
    {
        // Your work
    }
    catch(NumberFormatException ex)
    {
        System.out.println("wrong input");
    
    }
    
  2. # 2 楼答案

    在解析之前,请尝试检查getMinimal()和getQuantity()上的null

    if (transaksi.getMinimal() != null && transaksi.getQuantity() != null) {
     total += (Integer.parseInt(transaksi.getMinimal()))*
            (Integer.parseInt(transaksi.getQuantity()));
    }
    

    或者

    将解析代码保留在try块中,并捕获NumberFormatException。当getMinimal()或getQuantity()不为null且不是数字字符串时,这也会有所帮助

    try {
     total += (Integer.parseInt(transaksi.getMinimal()))*
            (Integer.parseInt(transaksi.getQuantity()));
    }catch(NumberFormatException e){
    Log.e("TAG","Excepting parsing Integer from string");
    }
    
  3. # 3 楼答案

    transaksi.getMinimal()transaksi.getQuantity()为空

    所以在尝试parseInt之前检查一下

    也许像

    if (transaksi.getMinimal() != null && transaksi.getQuantity() != null) {
         total += (Integer.parseInt(transaksi.getMinimal()))*
                (Integer.parseInt(transaksi.getQuantity()));
    }
    
  4. # 4 楼答案

    transaksi.getMinimal()transaksi.getQuantity()应该是有效的数字字符串,可以作为整数进行分析

    if (transaksi.getMinimal() != null && transaksi.getQuantity() != null && transaksi.getMinimal().equalIgnoreCase("null") && transaksi.getQuantity() .equalIgnoreCase("null") && !transaksi.getMinimal().isEmpty() && !transaksi.getQuantity().isEmpty()) {
         total += (Integer.parseInt(transaksi.getMinimal()))*
                (Integer.parseInt(transaksi.getQuantity()));
    }