2016-09-07 5 views
0

Scrollen nach oben ist mein Adapter Klasse:RecyclerView mit Glide verursacht Nullpointer nach hier wieder

@Override 
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

     View view = inflater.inflate(R.layout.container_accommodation,parent,false); 
     MyHolder holder = new MyHolder(view); 
     holder.setIsRecyclable(false); 
     return holder; 
    } 

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) { 

     MyHolder myHolder= (MyHolder) holder; 
     Accommodation current = data.get(position); 
     Picasso.with(context).load("http://10.0.2.2:18180/AAFS/Accommodations/"+current.AccommoID+"/Accomm_Images/"+current.AccommoMainImage.ImageName) 
       .error(R.drawable.error) 
       .into(myHolder.imageView); 

    } 

Hier ist der Fehler, den ich bekomme, wenn ich zu Scroll-up erneut versuchen, Scrollen funktioniert gut nach unten.

FATAL AUSNAHME: Haupt java.lang.NullPointerException bei com.example.phuluso.aafs.AdapterAccommodation.onBindViewHolder (AdapterAccommodation.java:73) bei android.support.v7.widget.RecyclerView $ Adapter.onBindViewHolder (RecyclerView.java:5471) bei android.support.v7.widget.RecyclerView $ Adapter.bindViewHolder (RecyclerView.java:5504) bei android.support.v7.widget.RecyclerView $ Recycler.getViewForPosition (RecyclerView.java:4741) bei android.support.v7.widget.RecyclerView $ Recycler.getViewForPosition (RecyclerView.java:4617) bei android.support.v7.widget.LinearLayoutManager $ LayoutState.next (LinearLayoutManager.java:1994) bei android .support.v7.widget.LinearLayoutManager.layoutChunk (LinearLayoutManager.java:1390) bei android.support.v7.widget.LinearLayoutManager.fill (LinearLayoutManager.java:1353) bei android.support.v7.widget.LinearLayoutManager .scrollBy (LinearLayoutManager.java:1180) unter android.support.v7.widget.LinearLayoutManager.s crollVerticallyBy (LinearLayoutManager.java:1031) bei android.support.v7.widget.RecyclerView $ ViewFlinger.run (RecyclerView.java:4061) bei android.view.Choreographer $ CallbackRecord.run (Choreographer.java:725) bei android.view.Choreographer.doCallbacks (Choreographer.java:555) bei android.view.Choreographer.doFrame (Choreographer.java:524) bei android.view.Choreographer $ FrameDisplayEventReceiver.run (Choreographer.java:711) bei android.os.Handler.handleCallback (Handler.java:615) bei android.os.Handler.dispatchMessage (Handler.java:92) bei android.os.Looper.loop (Looper.java:137) bei android.app.ActivityThread.main (ActivityThread.java:4944) bei java.lang.reflect.Method.invokeNative (native Methode) bei java .lang.reflect.Method.invoke (Method.java:511) bei com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1038) bei com.android.internal.os.ZygoteInit. main (ZygoteInit.java:805) bei dalvik.system.NativeStart.main (native Methode)

Jede Hilfe wäre toll.

Danke.

+0

Paste vollständigen Code Ihrer Adapterklasse. –

+0

Geben Sie Ihren vollständigen Adaptercode ein. Das Fehlerprotokoll ist nicht ausreichend –

+0

Der vollständige Code unter –

Antwort

0

Haben Sie die getItemCount-Methode in Ihrem Adapter überschrieben?

@Override 
public int getItemCount(){ 
    return data.size(); 
} 

Es scheint, wie die onBindViewHolder(VH holder, int position) Methode wird einen ungültigen Positionsparameter zu liefern. Wenn Sie also die Accommodation aus Ihrer Datensammlung abrufen, wird null zurückgegeben. Welche Art von Sammlung verwenden Sie, um die Unterkünfte zu halten?

+0

Unterkunft als eine Art –

0
public class AdapterAccommodation extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements Filterable { 

    private Context context; 
    private LayoutInflater inflater; 
    List<Accommodation> data = Collections.emptyList(); 
    List<Accommodation> mStringFilterList; 
    ValueFilter valueFilter; 


    public AdapterAccommodation(Context context,List<Accommodation>data) 
    { 
     this.context = context; 
     inflater = LayoutInflater.from(context); 
     this.data = data; 
     mStringFilterList = data; 

     } 

    @Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, final int viewType) { 

     View view = inflater.inflate(R.layout.container_accommodation,parent,false); 
     MyHolder holder = new MyHolder(view); 
     holder.setIsRecyclable(false); 
     return holder; 
    } 

    @Override 
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 

     MyHolder myHolder= (MyHolder) holder; 

     Accommodation current = data.get(position); 

     myHolder.textAccommoName.setText(current.AccommoName); 
     myHolder.txtAddress.setText("Address: " + current.AccommoAddress.Street + ", " + current.AccommoAddress.Town + ", " + current.AccommoAddress.City); 
     myHolder.txtGenderAllowed.setText("Gender Accommodated: " + current.AccommoDetails.GenderAllowed); 
     myHolder.txtDistance.setText("Distance from nearest Campus: " + current.Distance + " km"); 
     myHolder.textCapacity.setText("Capacity: " + current.Capacity); 
     myHolder.textNearestCampus.setText("Nearest Campus: "+ current.NearestCampus); 


     Picasso.with(context).load("http://192.168.42.197:18180/AAFS/Accommodations/"+current.AccommoID+"/Accomm_Images/"+current.AccommoMainImage.ImageName) 
       .error(R.drawable.error) 
       .into(myHolder.imageView); 

     myHolder.ratingBar.setRating(current.avgAccommoRating); 
     myHolder.ratingBar.setIsIndicator(true); 

     myHolder.btnAdditionalDetails.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       Intent intent = new Intent(context,AccommodationAdditionalDetails.class); 

       intent.putExtra("EXTRA_AccommodationID",data.get(position).AccommoID); 
       intent.putExtra("EXTRA_AccommodationName",data.get(position).AccommoName); 
       intent.putExtra("EXTRA_AccommodationCapacity",data.get(position).Capacity); 
       intent.putExtra("EXTRA_AccommodationNearestCampus",data.get(position).NearestCampus); 
       intent.putExtra("EXTRA_AccommodationDistance",data.get(position).Distance); 
       intent.putExtra("EXTRA_AccommodationAccreditedStatus",data.get(position).AccredStatus); 
       intent.putExtra("EXTRA_AccommodationCity",data.get(position).AccommoAddress.City); 
       intent.putExtra("EXTRA_AccommodationPostalAddress",data.get(position).AccommoAddress.PostalCode); 
       intent.putExtra("EXTRA_LATITUDE",data.get(position).AccommoAddress.Lattitude); 
       intent.putExtra("EXTRA_LONGITUDE",data.get(position).AccommoAddress.Longitude); 
       intent.putExtra("EXTRA_NUM_SHARING",data.get(position).AccommoDetails.NumTwoSharingRooms); 
       intent.putExtra("EXTRA_NUM_SINGLE",data.get(position).AccommoDetails.NumSingleRooms); 
       intent.putExtra("EXTRA_RENT_SINGLE",data.get(position).AccommoDetails.RentSingle); 
       intent.putExtra("EXTRA_RENT_SHARING",data.get(position).AccommoDetails.RentSharing); 

       intent.putExtra("EXTRA_WIFI",data.get(position).AccommoDetails.WiFi); 
       intent.putExtra("EXTRA_LIBRARY",data.get(position).AccommoDetails.DedicatedStudyArea); 
       intent.putExtra("EXTRA_GYM",data.get(position).AccommoDetails.Gym); 
       intent.putExtra("EXTRA_SECURITY_LEVEL",data.get(position).AccommoDetails.SecurityLevel); 
       intent.putExtra("EXTRA_PARKING_LOT",data.get(position).AccommoDetails.ParkingPort); 
       intent.putExtra("EXTRA_GENDER",data.get(position).AccommoDetails.GenderAllowed); 
       intent.putExtra("EXTRA_TRANSPORT",data.get(position).AccommoDetails.TransportShuttle); 
       intent.putExtra("EXTRA_WASHING_MACHINE",data.get(position).AccommoDetails.WashingMachine); 
       intent.putExtra("EXTRA_NUM_BATHROOM",data.get(position).AccommoDetails.NumBathrooms); 
       intent.putExtra("EXTRA_CLEANING_SERVICE",data.get(position).AccommoDetails.CleaningService); 

       context.startActivity(intent); 

       SharedPreferences settings = enter code herePreferenceManager.getDefaultSharedPreferences(context); 
       SharedPreferences.Editor editor = settings.edit(); 
       editor.putString("ACCOMMO_LATITUDE",data.get(position).AccommoAddress.Lattitude); 
       editor.commit(); 

       SharedPreferences setting1 = PreferenceManager.getDefaultSharedPreferences(context); 
       SharedPreferences.Editor editor1 = settings.edit(); 
       editor.putString("ACCOMMO_LONGITUDE",data.get(position).AccommoAddress.Longitude); 
       editor.commit(); 


      } 
     }); 
    } 

    @Override 

    public int getItemCount() { 
     return data.size(); 
    } 

    class MyHolder extends RecyclerView.ViewHolder{ 

     TextView textAccommoName; 
     // ImageView ivAccommodation; 
     TextView textCapacity; 
     TextView textNearestCampus; 
     TextView txtAddress; 
     TextView txtGenderAllowed; 
     TextView txtDistance; 
     Button btnAdditionalDetails; 
     RatingBar ratingBar; 
     ImageView imageView ; 
     public MyHolder(View itemView) { 
      super(itemView); 

      textAccommoName = (TextView)itemView.findViewById(R.id.textAccommodationName); 
      txtAddress = (TextView)itemView.findViewById(R.id.txtAddress); 
      txtGenderAllowed = (TextView)itemView.findViewById(R.id.txtGenderAllowed); 
      txtDistance = (TextView)itemView.findViewById(R.id.textDistanceFromNearestCampus); 
      imageView = (ImageView)itemView. findViewById(R.id.imageview); 
      // ivAccommodation = (ImageView)itemView.findViewById(R.id.img); 
      textCapacity = (TextView)itemView.findViewById(R.id.textCapacity); 
      textNearestCampus = (TextView)itemView.findViewById(R.id.textNearestCampus); 
      btnAdditionalDetails = (Button)itemView.findViewById(R.id.btnAdditionalDetails); 
      ratingBar = (RatingBar)itemView.findViewById(R.id.ratingBar); 

     } 

    } 

    @Override 
    public Filter getFilter() { 
     if (valueFilter == null) { 
      valueFilter = new ValueFilter(); 
     } 
     return valueFilter; 
    } 


    private class ValueFilter extends Filter { 
     @Override 
     protected FilterResults performFiltering(CharSequence constraint) { 
      FilterResults results = new FilterResults(); 

      if (constraint != null && constraint.length() > 0) { 
       ArrayList<Accommodation> filterList = new ArrayList<Accommodation>(); 
       for (int i = 0; i < mStringFilterList.size(); i++) { 
        if ((mStringFilterList.get(i).AccommoName.toUpperCase()) 
          .contains(constraint.toString().toUpperCase())) { 

         Accommodation accommodation = new Accommodation(); 
         accommodation.AccommoName = mStringFilterList.get(i).AccommoName; 
         accommodation.AccommoDetails.GenderAllowed = mStringFilterList.get(i).AccommoDetails.GenderAllowed; 
         accommodation.AccommoAddress.Town = mStringFilterList.get(i).AccommoAddress.Town; 
         accommodation.AccommoAddress.City = mStringFilterList.get(i).AccommoAddress.City; 
         accommodation.Capacity = mStringFilterList.get(i).Capacity; 
         accommodation.Distance = mStringFilterList.get(i).Distance; 
         accommodation.AccommoAddress.Street = mStringFilterList.get(i).AccommoAddress.Street; 
         accommodation.NearestCampus = mStringFilterList.get(i).NearestCampus; 
         accommodation.avgAccommoRating = mStringFilterList.get(i).avgAccommoRating; 

         filterList.add(accommodation); 
        } 
       } 
       results.count = filterList.size(); 
       results.values = filterList; 
      } else { 
       results.count = mStringFilterList.size(); 
       results.values = mStringFilterList; 
      } 
      return results; 

     } 

     @Override 
     protected void publishResults(CharSequence constraint, 
             FilterResults results) { 
      data = (ArrayList<Accommodation>) results.values; 
      notifyDataSetChanged(); 
     } 
} 


} 
0

Ok, so jetzt, dass ich Ihren Adapter Code sehe Ich denke, das Problem liegt wahrscheinlich bei Ihrer Filter-Implementierung. Versuchen Sie, Ihre publishResults Methode Wechsel zu:

@Override 
protected void publishResults(CharSequence constraint, 
            FilterResults results) { 
    if(results.count > 0){ 
     data.clear(); 
     data.addAll(results.values); 
     notifyDataSetChanged(); 
    }else{ 
     notifyDataSetInvalidated(); 
    } 
} 

Herausgegeben - Die NPE trat beim Versuch, die AccommoMainImage Eigenschaft zuzugreifen auf einen der Unterkunft Objekte.

Added eine NULL-Prüfung, das Problem zu lösen:

if(current.AccommoMainImage != null){ 
    Picasso.with(context).load("http://10.0.2.2:18180/AAFS/Accom‌​modations/"+current.‌​AccommoID+"/Accomm_I‌​mages/"+current.Acco‌​mmoMainImage.ImageNa‌​me) .error(R.drawable.error) .into(myHolder.imageView); 
} 
+0

Picasso.with (Kontext) Ist die Linie verursacht Nullzeiger –

+0

Ok, so ist die aktuelle Unterkunft null. Ich denke, dass Ihre zugrundeliegende Accommodation-Sammlung (Daten) durch die Methode "publishResults" oder die Methode "permformFiltering" Ihrer Filterklasse durcheinander gebracht wird. Haben Sie die Änderungen auf die Methode publishResults angewendet? – ajplumlee33

+0

Entweder das oder eines der Accommodations-Objekte hat eine Null-Eigenschaft AccommoMainImage, und Sie sollten eine Überprüfung auf null hinzufügen: 'if (current.AccommoMainImage! = Null) {Picasso.with (context) .load (" http: // 10.0.2.2:18180/AAFS/Accommodations/"+current.AccommoID+"/Accomm_Images/"+current.AccommoMainImage.ImageName) .error (R.drawable.error) .into (myHolder.imageView);} ' – ajplumlee33

Verwandte Themen