2017-07-22 4 views
-1

私はアンドロイドアプリを作っています。インターネット上でjson形式のテキストを読み込んで簡単なリストに表示します。 それはすべてうまく動作しますが、文字列を置き換えるとき、どんな種類のものであれ、私のアプリはクラッシュします。手伝って頂けますか?文字列を置換するとアンドロイドアプリが狂ってしまう

ここではコードです:

public View getView(int position, View convertView, ViewGroup parent) { 

     ViewHolder holder = null; 

     if(convertView == null){ 
      holder = new ViewHolder(); 
      convertView = inflater.inflate(resource, null); 
      holder.ivMovieIcon = (ImageView)convertView.findViewById(R.id.ivIcon); 
      holder.tvMovie = (TextView)convertView.findViewById(R.id.tvMovie); 
      holder.tvTagline = (TextView)convertView.findViewById(R.id.tvTagline); 
      holder.tvYear = (TextView)convertView.findViewById(R.id.tvYear); 
      holder.tvDuration = (TextView)convertView.findViewById(R.id.tvDuration); 
      holder.tvDirector = (TextView)convertView.findViewById(R.id.tvDirector); 
      holder.rbMovieRating = (RatingBar)convertView.findViewById(R.id.rbMovie); 
      holder.tvCast = (TextView)convertView.findViewById(R.id.tvCast); 
      holder.tvStory = (TextView)convertView.findViewById(R.id.tvStory); 
      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     final ProgressBar progressBar = (ProgressBar)convertView.findViewById(R.id.progressBar); 

     // Then later, when you want to display image 
     final ViewHolder finalHolder = holder; 
     ImageLoader.getInstance().displayImage(movieModelList.get(position).getImage(), holder.ivMovieIcon, new ImageLoadingListener() { 
      @Override 
      public void onLoadingStarted(String imageUri, View view) { 
       progressBar.setVisibility(View.VISIBLE); 
       finalHolder.ivMovieIcon.setVisibility(View.INVISIBLE); 
      } 

      @Override 
      public void onLoadingFailed(String imageUri, View view, FailReason failReason) { 
       progressBar.setVisibility(View.GONE); 
       finalHolder.ivMovieIcon.setVisibility(View.INVISIBLE); 
      } 

      @Override 
      public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { 
       progressBar.setVisibility(View.GONE); 
       finalHolder.ivMovieIcon.setVisibility(View.VISIBLE); 
      } 

      @Override 
      public void onLoadingCancelled(String imageUri, View view) { 
       progressBar.setVisibility(View.GONE); 
       finalHolder.ivMovieIcon.setVisibility(View.INVISIBLE); 
      } 
     }); 

     holder.tvMovie.setText(movieModelList.get(position).getMovie()); 
     holder.tvTagline.setText(movieModelList.get(position).getTagline()); 
     holder.tvYear.setText("Year: " + movieModelList.get(position).getYear()); 
     holder.tvDuration.setText("Duration:" + movieModelList.get(position).getDuration()); 
     holder.tvDirector.setText("Director:" + movieModelList.get(position).getDirector()); 

     // rating bar 
     holder.rbMovieRating.setRating(movieModelList.get(position).getRating()/2); 

     StringBuffer stringBuffer = new StringBuffer(); 
     for(MovieModel.Cast cast : movieModelList.get(position).getCastList()){ 
      stringBuffer.append(cast.getName() + ", "); 
     } 

     holder.tvCast.setText("Cast:" + stringBuffer); 
     holder.tvStory.setText(movieModelList.get(position).getStory()); 
     return convertView; 
    } 

getDirectorの取得-方法は次のとおりです。

public String getDirector() { 
    return director; 
} 

public void setDirector(String director) { 
    this.director = director; 
} 

私はこの行を変更:

holder.tvDirector.setText("Director:" + movieModelList.get(position).getDirector().replace("test","test1")); 

holder.tvDirector.setText("Director:" + movieModelList.get(position).getDirector()); 

は、

私のアプリケーションがクラッシュしました。しかし、なぜ ?このテキストをどのように置き換えることができますか? Logcatであなたの助け

ため

ありがとう:すべての

07-22 14:33:23.233 2714-2714/? E/AndroidRuntime: FATAL EXCEPTION: main 
               java.lang.NullPointerException 
                at com.hisham.jsonparsingdemo.MainActivity$MovieAdapter.getView(MainActivity.java:219) 
                at android.widget.AbsListView.obtainView(AbsListView.java:2271) 
                at android.widget.ListView.makeAndAddView(ListView.java:1769) 
                at android.widget.ListView.fillDown(ListView.java:672) 
                at android.widget.ListView.fillFromTop(ListView.java:733) 
                at android.widget.ListView.layoutChildren(ListView.java:1622) 
                at android.widget.AbsListView.onLayout(AbsListView.java:2106) 
                at android.view.View.layout(View.java:13754) 
                at android.view.ViewGroup.layout(ViewGroup.java:4364) 
                at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1649) 
                at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1507) 
                at android.widget.LinearLayout.onLayout(LinearLayout.java:1420) 
                at android.view.View.layout(View.java:13754) 
                at android.view.ViewGroup.layout(ViewGroup.java:4364) 
                at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
                at android.view.View.layout(View.java:13754) 
                at android.view.ViewGroup.layout(ViewGroup.java:4364) 
                at android.support.v7.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:493) 
                at android.view.View.layout(View.java:13754) 
                at android.view.ViewGroup.layout(ViewGroup.java:4364) 
                at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
                at android.view.View.layout(View.java:13754) 
                at android.view.ViewGroup.layout(ViewGroup.java:4364) 
                at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1649) 
                at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1507) 
                at android.widget.LinearLayout.onLayout(LinearLayout.java:1420) 
                at android.view.View.layout(View.java:13754) 
                at android.view.ViewGroup.layout(ViewGroup.java:4364) 
                at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
                at android.view.View.layout(View.java:13754) 
                at android.view.ViewGroup.layout(ViewGroup.java:4364) 
                at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1868) 
                at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1689) 
                at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000) 
                at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4214) 
                at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725) 
                at android.view.Choreographer.doCallbacks(Choreographer.java:555) 
                at android.view.Choreographer.doFrame(Choreographer.java:525) 
                at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711) 
                at android.os.Handler.handleCallback(Handler.java:615) 
                at android.os.Handler.dispatchMessage(Handler.java:92) 
                at android.os.Looper.loop(Looper.java:137) 
                at android.app.ActivityThread.main(ActivityThread.java:4745) 
                at java.lang.reflect.Method.invokeNative(Native Method) 
                at java.lang.reflect.Method.invoke(Method.java:511) 
                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
                at dalvik.system.NativeStart.main(Native Method) 
+2

あなたのlogcatを投稿してください。 –

答えて

-1

まず、常に私たちはあなたのケースでAPI から値を取得している場合、それはようにする必要があり、nullのチェックがあるはずですこのコード:

if(null != movieModelList && null != movieModelList.get(position) && null != movieModelList.get(position).getDirector()){ 
    //here you can set text or do things this will help you avoid unnecessary crashes of data not available/null pointer from API 
} 

また、コードを簡単に読みやすくするために中括弧を使用してください。 他の人がコードを維持するのに役立ちます。

holder.tvDirector.setText("Director:" + (movieModelList.get(position).getDirector()).replace("test","test1")); 

最後にではなく、エラーの少なくとも 我々は uが良く助けることができるように私達にあなたのログを提供:)

0

を原因NPE(NULLポインタ例外)です。

あなたは配列リストからnullデータを持っているようです。

getDirector()リターンが

holder.tvDirector.setText("Director:" + movieModelList.get(position).getDirector()); 

をゼロしかし、あなたが追加したときに、 `、( "テスト"、 "TEST1")の部分を交換する場合のラインは上記クラッシュしない場合movieModelList.get(位置).getDirector() nullの場合、クラッシュします。

あなたは、余分なヌルチェックを追加したり、以下のようなTextUtils.isEmpty()メソッドを使用する必要があります。

if(!TextUtils.isEmpty(movieModelList.get(position).getDirector())){ 
    holder.tvDirector.setText("Director:" + movieModelList.get(position).getDirector().replace("test","test1")); 
}else{ 
    holder.tvDirector.setText("Director:" + "write something else"); 
} 
関連する問題