如何处理NPE

时间:2011-07-20 12:22:10

标签: android

在我的应用程序中,我必须使用Web服务响应来填充视图。

我正在获得正确的Web服务响应,但在使用响应填充视图时,我在设备上运行时会获得NPE。但是,当在模拟器中运行时,它正常工作。

我找不到NPE的原因,下面是我的代码,有人可以帮忙吗?

getview()的{​​{1}}方法中引发了异常。

堆栈跟踪:

r2(holder.r2.setRating(ksrating_value_w_onedecimal);)

和java文件:

07-20 17:21:21.357: ERROR/AndroidRuntime(4144): java.lang.NullPointerException

07-20 17:21:21.357: ERROR/AndroidRuntime(4144):     at com.ibkr.roadbrake.RB_StaticSearchResults$StaticSearchResultsListViewAdapter.getView(RB_StaticSearchResults.java:810)

07-20 17:21:21.357: ERROR/AndroidRuntime(4144):     at android.widget.AbsListView.obtainView(AbsListView.java:1385)

07-20 17:21:21.357: ERROR/AndroidRuntime(4144):     at android.widget.ListView.measureHeightOfChildren(ListView.java:1213)

07-20 17:21:21.357: ERROR/AndroidRuntime(4144):     at android.widget.ListView.onMeasure(ListView.java:1126)

07-20 17:21:21.357: ERROR/AndroidRuntime(4144):     at android.view.View.measure(View.java:8020)
07-20 17:21:21.357: ERROR/AndroidRuntime(4144):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3023)

1 个答案:

答案 0 :(得分:0)

<强>更新

我现在明白出了什么问题。此方法出错:

  holder.r2.setRating(ksrating_value_w_onedecimal);

表示持有者或r2为空。因为holder是通过调用new ViewHolder()来初始化的,所以只有在抛出异常时才能为null,所以这不是问题。接下来你打电话

  holder.r2 = (RatingBar)convertView.findViewById(R.id.kssmall_ratingbar);

这似乎是你的问题。如果findViewById()方法找不到被引用的id,则返回null。

因此,请查看stsearchresults_eachitem.xml并确认您的身份kssmall_ratingbar - 我怀疑您的问题出在哪里。

原始回复:

如果只看一下导致异常的行,NullPointerExceptions通常很容易。在这种情况下,请看一下:

  

com.ibkr.roadbrake.RB_StaticSearchResults $ StaticSearchResultsListViewAdapter.getView(RB_StaticSearchResults.java:810)

检查每个变量并确定它是否为null;其中一个绝对是。然后弄清楚为什么它是null。继续这样做,直到找到问题为止。希望能提供足够的信息。

顺便说一句,我没有看到任何调用r2()方法的代码,所以当你说:

时我不明白
  

在r2的getview()方法中引发异常(holder.r2.setRating(ksrating_value_w_onedecimal);)。