0

我的應用程序在飛濺活動後保持crashinng。在錯誤部分顯示NullPointerException。如何解決這個問題?應用程序不斷崩潰java.lang.NullPointerException:嘗試在空對象上調用虛擬方法參考

爲錯誤表明我RecipeListFragment.java文件是:

public class RecipeListFragment extends Fragment { 
MyDatabase db; 
boolean isfav = false; 
Context context; 
ListView lvrecipe; 
ArrayList<RecipePojo> recipelist = new ArrayList<RecipePojo>(); 
// private MoPubView adView; 
LinearLayout ll; 
DisplayImageOptions options; 
private ProgressDialog progress; 
int position; 
String recipeid; 
int checkcounter = 0; 

private Custom_Adapter adapter; 

public RecipeListFragment() { 

} 

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.activity_recipe_list_actvity, container, false); 
    context = getActivity(); 

    lvrecipe = (ListView) rootView.findViewById(R.id.lvrecipe); 
    // adView = (MoPubView)rootView. findViewById(R.id.mopub_sample_ad); 

    new getrecipe().execute(); 


    db = new MyDatabase(getActivity()); 


    // recipelist = DataManager.recipelist; 
    position = DataManager.selectedposition; 
    adapter = new Custom_Adapter(getActivity()); 
    adapter.notifyDataSetChanged(); 
    lvrecipe.setAdapter(adapter); 


    lvrecipe.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

      DataManager.selectedposition = position; 
      Intent i = new Intent(getActivity(), RecipeDescription.class); 
      i.putExtra("cusinename", DataManager.cusinename); 
      startActivity(i); 
      getActivity().finish(); 
     } 
    }); 

    // adddisplay(); 

    return rootView; 
} 



@Override 
public void onResume() { 
    super.onResume(); 
} 

public class Custom_Adapter extends BaseAdapter { 

    private LayoutInflater mInflater; 

    public Custom_Adapter(Context c) { 
     mInflater = LayoutInflater.from(c); 
    } 

    @Override 
    public int getCount() { 
     if (recipelist != null) { 
      return recipelist.size(); 
     } else { 
      return 0; 
     } 
    } 

    @Override 
    public Object getItem(int position) { 
     if (recipelist != null) { 
      return recipelist.get(position); 
     } else { 
      return 0; 
     } 
    } 

    @Override 
    public long getItemId(int position) { 
     if (recipelist != null) { 
      return position; 
     } else { 
      return 0; 
     } 
    } 

    @SuppressWarnings("deprecation") 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder; 
     if (convertView == null) { 
      convertView = mInflater.inflate(R.layout.recipelist, null); 
      holder = new ViewHolder(); 

      holder.txttile = (TextView) convertView.findViewById(R.id.txttile); 
      holder.imgrecipe = (ImageView) convertView.findViewById(R.id.imgrecipe); 
      holder.fav_unfav = (ImageView) convertView.findViewById(R.id.fav_unfav); 
      holder.ratingbar = (RatingBar) convertView.findViewById(R.id.ratingbar); 
      holder.txtduration = (TextView) convertView.findViewById(R.id.txtduration); 
      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 


     if (recipelist != null) { 
      recipeid = recipelist.get(position).getRecipeid(); 
      checkcounter = db.checkrecipefav(recipeid); 
     } 

     if (checkcounter > 0) { 
      isfav = true; 
     } else { 
      isfav = false; 
     } 

     db.close(); 

     if (isfav) { 
      holder.fav_unfav.setImageResource(R.drawable.favourite); 
     } else { 
      holder.fav_unfav.setImageResource(R.drawable.favourites); 
     } 

     Typeface face1 = Typeface.createFromAsset(getActivity().getAssets(), "sinkin_sans_300_light.ttf"); 
     Typeface face2 = Typeface.createFromAsset(getActivity().getAssets(), "sinkin_sans_400_regular.ttf"); 

     holder.txttile.setTypeface(face2); 
     holder.txtduration.setTypeface(face1); 


     holder.txttile.setText(recipelist.get(position).getRecipename()); 

     try { 
      String[] prep = recipelist.get(position).getPrep_time().split(" "); 
      String[] cook = recipelist.get(position).getCooking_time().split(" "); 

      int totalTime = Integer.parseInt(prep[0]) + Integer.parseInt(cook[0]); 

      holder.txtduration.setText(""+totalTime+" min"); 

     } catch (NumberFormatException e) { 
      e.printStackTrace(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 


     String url = DataManager.photourl + "recipe/" + recipelist.get(position).getRecipeid() + ".jpg"; 

     try { 
      url = URLDecoder.decode(url, "UTF-8"); 
      url = url.replaceAll(" ", "%20"); 
     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 


     if (recipelist.get(position).getVideo_link().equals("none")) { 
      // holder.imgvideo.setVisibility(View.GONE); 
     } 

     String rating = recipelist.get(position).getRatings(); 

     if (rating != null && rating.trim().length() > 0) { 
      holder.ratingbar.setRating(Float.valueOf(rating)); 
     } 



     if (holder.imgrecipe != null) { 

      if (url != null && url.trim().length() > 0) { 
       //final ProgressBar pbar = holder.pbar; 
       final ImageView imageView = holder.imgrecipe; 
       //final RelativeLayout imgRL = holder.imageRL; 

       ImageLoader.getInstance().displayImage(url, holder.imgrecipe, options, new SimpleImageLoadingListener() { 
        @Override 
        public void onLoadingComplete(String imageUri, 
                View view, Bitmap loadedImage) { 
         super.onLoadingComplete(imageUri, view, loadedImage); 
         imageView.setAdjustViewBounds(true); 
        } 

        @Override 
        public void onLoadingFailed(String imageUri, View view, FailReason failReason) { 
         super.onLoadingFailed(imageUri, view, failReason); 
        } 

        @Override 
        public void onLoadingStarted(String imageUri, View view) { 
         super.onLoadingStarted(imageUri, view); 
        } 
       }); 

      } else { 
      } 

     } 


     return convertView; 
    } 

    class ViewHolder { 
     TextView txttile, txtduration; 
     ImageView imgrecipe; 
     ImageView fav_unfav; 
     RatingBar ratingbar; 
    } 
} 

public class getrecipe extends AsyncTask<String, Void, String> { 
    boolean response = false; 

    @Override 
    protected void onPreExecute() { 
     //progress = ProgressDialog.show(context, "Getting Data...","Please wait...."); 

     progress = new ProgressDialog(getActivity()); 
     progress.setMessage("Please wait...."); 
     progress.show(); 
    } 

    @Override 
    protected String doInBackground(String... params) { 
     response = APIManager.getrecipebycusine(DataManager.CUISINE_ID); 

     return ""; 
    } 

    @Override 
    protected void onPostExecute(String result) { 

     progress.cancel(); 
     if (response) { 

      if (DataManager.status.equalsIgnoreCase("1")) { 
       recipelist = DataManager.recipelist; 
       adapter.notifyDataSetChanged(); 
       //Intent i = new Intent(getActivity(),RecipeListActvity.class); 

       //startActivity(i); 

      } else { 

       connectionerror(); 

      } 
     } else { 

      connectionerror(); 
     } 

    } 

    @Override 
    protected void onProgressUpdate(Void... values) { 

    } 
} 

public void alert() { 
    AlertDialog.Builder alertDialog = new AlertDialog.Builder(getActivity()); 

    alertDialog.setTitle("No Recipe!"); 

    alertDialog.setMessage("No Recipe for this Cusine"); 

    alertDialog.setPositiveButton("OK", 
      new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 

       } 
      }); 

    alertDialog.show(); 
} 

private static class AnimateFirstDisplayListener extends SimpleImageLoadingListener { 

    static final List<String> displayedImages = Collections.synchronizedList(new LinkedList<String>()); 

    @Override 
    public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { 
     if (loadedImage != null) { 
      ImageView imageView = (ImageView) view; 
      boolean firstDisplay = !displayedImages.contains(imageUri); 
      if (firstDisplay) { 
       FadeInBitmapDisplayer.animate(imageView, 500); 
       displayedImages.add(imageUri); 
      } 
     } 
    } 
} 

public void connectionerror() { 
    // if (getActivity() == null) { 
    AlertDialog.Builder alertDialog = new AlertDialog.Builder(getActivity()); 

    alertDialog.setTitle("Error!"); 

    alertDialog.setMessage("Connection Lost ! Try Again"); 

    alertDialog.setPositiveButton("Retry", 
      new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 

        new getrecipe().execute(); 

       } 
      }); 

    alertDialog.show(); 
} 

//}} 

錯誤:

Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setTypeface(android.graphics.Typeface)' on a null object reference 
     at com.raccoonfinger.dessert.RecipeListFragment$Custom_Adapter.getView(RecipeListFragment.java:207) 
     at android.widget.AbsListView.obtainView(AbsListView.java:2344) 
     at android.widget.ListView.makeAndAddView(ListView.java:1864) 
     at android.widget.ListView.fillDown(ListView.java:698) 
     at android.widget.ListView.fillFromTop(ListView.java:759) 
     at android.widget.ListView.layoutChildren(ListView.java:1659) 
     at android.widget.AbsListView.onLayout(AbsListView.java:2148) 
     at android.view.View.layout(View.java:15614) 
     at android.view.ViewGroup.layout(ViewGroup.java:4968) 
     at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1076) 
     at android.view.View.layout(View.java:15614) 
     at android.view.ViewGroup.layout(ViewGroup.java:4968) 
     at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573) 
     at android.widget.FrameLayout.onLayout(FrameLayout.java:508) 
     at android.view.View.layout(View.java:15614) 
     at android.view.ViewGroup.layout(ViewGroup.java:4968) 
     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703) 
     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557) 
     at android.widget.LinearLayout.onLayout(LinearLayout.java:1466) 
     at android.view.View.layout(View.java:15614) 
     at android.view.ViewGroup.layout(ViewGroup.java:4968) 
     at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:1043) 
     at android.view.View.layout(View.java:15614) 
     at android.view.ViewGroup.layout(ViewGroup.java:4968) 
     at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1076) 
     at android.view.View.layout(View.java:15614) 
     at android.view.ViewGroup.layout(ViewGroup.java:4968) 
     at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573) 
     at android.widget.FrameLayout.onLayout(FrameLayout.java:508) 
     at android.view.View.layout(View.java:15614) 
     at android.view.ViewGroup.layout(ViewGroup.java:4968) 
     at com.android.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:494) 
     at android.view.View.layout(View.java:15614) 
     at android.view.ViewGroup.layout(ViewGroup.java:4968) 
     at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573) 
     at android.widget.FrameLayout.onLayout(FrameLayout.java:508) 
     at android.view.View.layout(View.java:15614) 
     at android.view.ViewGroup.layout(ViewGroup.java:4968) 
     at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2102) 
     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1859) 
     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1077) 
     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5884) 
     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767) 
     at android.view.Choreographer.doCallbacks(Choreographer.java:580) 
     at android.view.Choreographer.doFrame(Choreographer.java:550) 
     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753) 
     at android.os.Handler.handleCallback(Handler.java:739) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:135) 
     at android.app.ActivityThread.main(ActivityThread.java:5312) 
     at java.lang.reflect.Method.invoke(Method.java) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696) 
+0

你確定'recipelist'佈局包含TextView和'txttile' id嗎? –

回答

0

您的佈局recipelist.xml不包含TextView ID爲txttiletxtduration

0

我敢肯定,你的問題是,因爲這些

holder.txttile.setTypeface(face2); 
    holder.txtduration.setTypeface(face1); 

您對空引用調用setTypeface。你必須找到這個案例持有者或txttile或txtduration OR face1或face2的null。 大部分的機會都是關於持有者,txttile,txtduration。

0

getView()您需要在方法mInflater.inflate(R.layout.recipelist, null);中添加三個參數,就像這樣mInflater.inflate(R.layout.recipelist, parent, false);它會工作。

相關問題