2011-07-20 10 views
0

私のアプリケーションでは、Webサービスの応答を使用してビューを入力する必要があります。NPEを処理する方法

私は正しいWebサービスの応答を得ていますが、応答を使用してビューを満たすときに、デバイスで実行しているときにNPEを取得します。ただし、エミュレーターで実行すると正常に動作しています。

私はNPEの原因を見つけることができません、私のコードは、誰も助けることができますか?

getview()メソッドの例外は、r2(holder.r2.setRating(ksrating_value_w_onedecimal);)です。

スタックトレース:

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) 

とJavaファイル:

public View getView(final int position, View convertView, ViewGroup parent) 
    {   
     class ViewHolder 
     {     
      RatingBar r1,r2,r3; 
      TextView ratingpts, ratingpks, ratingprr;    
     } 
     ViewHolder holder; 

     //if (convertView == null) { 
      convertView = mInflater.inflate(R.layout.stsearchresults_eachitem, null); 

      // Creates a ViewHolder and store references to the two children views 
      // we want to bind data to. 
      holder = new ViewHolder();    
      holder.r1 = (RatingBar)convertView.findViewById(R.id.small_ratingbar); 
      holder.ratingpts = (TextView)convertView.findViewById(R.id.ratingpts);     
      holder.r2 = (RatingBar)convertView.findViewById(R.id.kssmall_ratingbar); 
      holder.ratingpks = (TextView)convertView.findViewById(R.id.ratingpks); 
      holder.r3 = (RatingBar)convertView.findViewById(R.id.rrsmall_ratingbar); 
      holder.ratingprr = (TextView)convertView.findViewById(R.id.ratingprr); 


      /*convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     }  */  

     float rating = RB_Constant.filterSearchResultObj.response.get(position).Rating; 
     float rating_value = Math.round(rating * 10);   
    float rating_value_w_onedecimal = rating_value/10;    

     try 
     { 
      holder.r1.setRating(rating_value_w_onedecimal); 
     } 
     catch(Exception e){ 
      System.out.println("Error->"+e.toString()+" position "+position); 
     }    
     holder.ratingpts.setText(""+rating_value_w_onedecimal);  

     float ksrating = RB_Constant.filterSearchResultObj.response.get(position).KidsRating; 
     float ksrating_value = Math.round(ksrating * 10);   
     float ksrating_value_w_onedecimal = ksrating_value/10; 
     try{ 
      holder.r2.setRating(ksrating_value_w_onedecimal); 
     } 
     catch(Exception e){ 
      System.out.println("Error->"+e.toString()+" position "+position); 
     }    
     holder.ratingpks.setText(""+ksrating_value_w_onedecimal); 

     float rrrating = RB_Constant.filterSearchResultObj.response.get(position).RestRoomRating; 
     float rrrating_value = Math.round(rrrating * 10);   
     float rrrating_value_w_onedecimal = rrrating_value/10; 
     try{ 
      holder.r3.setRating(rrrating_value_w_onedecimal); 
     } 
     catch(Exception e){ 
      System.out.println("Error->"+e.toString()+" position "+position); 
     }    
     holder.ratingprr.setText(""+rrrating_value_w_onedecimal); 
     ------------ 
     ------------ 
     ------------ 
    } 
+0

nullになり、引数として渡すことができる文字列を調べます。 –

+0

r2(評価バー2)で例外があります。私は正しいws応答を得た。エミュレータではNPEなしで動作しますが、デバイスではr2でNPEを取得しました。 – naresh

+0

は明らかか、必要な情報はありますか? – naresh

答えて

0

UPDATE:

私は今、間違って何が起こっているか理解しています。この方法でエラーが発生する:

holder.r2.setRating(ksrating_value_w_onedecimal); 

これは、ホルダーまたはr2がヌルであることを意味します。ホルダーはnew ViewHolder()の呼び出しで初期化されるため、例外をスローするとnullになる可能性がありますが、問題はありません。次は、あなたの問題と思われる

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

と呼びます。 findViewById()メソッドは、参照されているIDが見つからない場合はnullを返します。

だから、stsearchresults_eachitem.xmlを参照し、IDがkssmall_ratingbarであることを確認してください - あなたの問題がどこにあるのか疑いがあります。

元の応答:

NullPointerExceptionsがあなただけの例外の原因となっている行を見れば、通常は非常に簡単です。各変数を調べ、それがnullになるかどうかを決定

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

;:この場合は、を見てみましょうそのうちの1つは間違いありません。なぜそれがnullであるのか理解する。あなたが問題を見つけるまでそれを続けてください。十分な情報を与えることを願っています。

ところで、私はR2()メソッドを呼び出し、任意のコードが表示されないので、あなたが言うとき、私は理解していない:

例外は(R2でgetViewメソッド()メソッドで飼育されてholder.r2.setRating(ksrating_value_w_onedecimal);)。

+1

拡張子として.. 呼び出しをネストすると、プログラムの検査が難しくなります。そのような呼び出しを入れ子にするのは避けるのが最善です。別の呼び出しに渡す前に戻り値を変数に代入してください。このようにすれば、どの呼び出しがnullを返すかを簡単に確認できます。 –

+0

ええ、たとえばRB_Constant.filterSearchResultObj.response.get(position).RestRoomRatingを使用すると、NPEになり、NPEになる可能性のある4つの異なるものがあります。私は1つの行に2つ以上しか持たない傾向があります。 –

+0

しかしここで私は正しい値(ksrating_value_w_onedecimal)を得ています。 "holder.r2.setRating(ksrating_value_w_onedecimal);で例外のみが発生します。私の問題では – naresh

関連する問題