错误,InvalidLong / Number格式异常

时间:2014-08-04 10:32:37

标签: android numberformatexception

我正在开发一个应用程序,我使用ListAdapter将值传递给列表,其中一个值是String,我将其解析为int值。适配器类的代码片段如下所示

 public long getItemId(int i) {
        return Long.parseLong(list.get(i).getProductID().trim());
    }

但是我能够查看传递的列表,但是一旦我触摸屏幕(有时一次或多次 - 滚动列表时没有问题)我得到一个NumberformatException错误,因为我的应用程序崩溃了。 以下是错误日志

java.lang.NumberFormatException: Invalid long: "1101V0104"
    at java.lang.Long.invalidLong(Long.java:124)
    at java.lang.Long.parse(Long.java:361)
    at java.lang.Long.parseLong(Long.java:352)
    at java.lang.Long.parseLong(Long.java:318)
    at com.example.knr.DataListAdapter.getItemId(DataListAdapter.java:44)
    at android.widget.AdapterView.getItemIdAtPosition(AdapterView.java:769)
    at android.widget.AdapterView.setSelectedPositionInt(AdapterView.java:1154)
    at android.widget.AbsListView.onTouchUp(AbsListView.java:3623)
    at android.widget.AbsListView.onTouchEvent(AbsListView.java:3436)
    at android.view.View.dispatchTouchEvent(View.java:7706)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2210)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1945)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
    at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2068)
    at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1515)
    at android.app.Activity.dispatchTouchEvent(Activity.java:2458)
    at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2016)
    at android.view.View.dispatchPointerEvent(View.java:7886)
    at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:3947)
    at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3826)
    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3392)
    at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3442)
    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3411)
    at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3518)
    at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3419)
    at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3575)
    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3392)
    at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3442)
    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3411)
    at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3419)
    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3392)
    at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5532)
    at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5512)
    at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5483)
    at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5612)
    at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
    at android.os.MessageQueue.nativePollOnce(Native Method)
    at android.os.MessageQueue.next(MessageQueue.java:138)
    at android.os.Looper.loop(Looper.java:123)
    at android.app.ActivityThread.main(ActivityThread.java:5001)

有没有其他方法可以避免此错误,以便我的应用程序不会崩溃?谢谢!!

2 个答案:

答案 0 :(得分:4)

答案在于logcat输出本身。

这一行:java.lang.NumberFormatException:无效长:" 1101V0104"

你正试图从一些东西中获得一个很长的东西。

答案 1 :(得分:1)

当你不确定从服务器获取的价值时,请尝试检查它并在执行操作之后像铸造一样

 public long getItemId(int i) {
  if(TextUtils.isDigitsOnly(list.get(i).getProductID().toString())        
     return Long.parseLong(list.get(i).getProductID());
  else
     return 0;
  }