2017-06-15 3 views
-1

Je veux obtenir le contexte d'application à utiliser avec glide dans la classe de non-activité. Mais ça revient toujours à zéro. C'est le code que j'utilise - comment pourrais-je résoudre cela?Pourquoi ce contexte renvoyait toujours null?

J'ai créé Contextor pour obtenir le contexte d'application à utiliser dans un modèle sans activité.

public class Contextor { 

    private static Contextor instance; 

    public static Contextor getInstance() { 
     if (instance == null) 
      instance = new Contextor(); 
     return instance; 
    } 

    private Context mContext; 

    private Contextor() {} 

    public void init(Context context) { 
     mContext = context; 
    } 

    public Context getContext() { 
     return mContext; 
    } 
} 

Dans myRecyclerViewAdapter.

public class RecyclerViewNewfeedAdapter extends RecyclerView.Adapter<RecyclerViewNewfeedAdapter.PostViewHolder> { 

private List<Post> mPostList; 
private Context mContext; 

class PostViewHolder extends RecyclerView.ViewHolder { 
    TextView username; 
    TextView text; 
    CircleImageView profileImage; 

    PostViewHolder(View view) { 
     super(view); 
     username = (TextView) view.findViewById(R.id.tvPostUsername); 
     text = (TextView) view.findViewById(R.id.tvPostText); 
    } 
} 

public RecyclerViewNewfeedAdapter(List<Post> mPostList) { 
    this.mPostList = mPostList; 
} 

@Override 
public PostViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View itemView = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.post_row, parent, false); 

    initInstances(); 

    return new PostViewHolder(itemView); 
} 

private void initInstances(){ 
    mContext = Contextor.getInstance().getContext(); 
} 

@Override 
public void onBindViewHolder(final PostViewHolder holder, int position) { 
    final Post post = mPostList.get(position); 

    FirebaseRef.mUserInfoRef.child(post.getOwnerPost()).addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      holder.username.setText(dataSnapshot.child("username").getValue(String.class)); 
      Glide.with(mContext).load(dataSnapshot.child("profileImage").getValue(String.class)).placeholder(R.drawable.ic_default_profile_image).diskCacheStrategy(DiskCacheStrategy.ALL).into(holder.profileImage); 
      holder.text.setText(post.getTextPost()); 
     } 
     @Override 
     public void onCancelled(DatabaseError databaseError) { 
     } 
    }); 
} 
@Override 
public int getItemCount() { 
    return mPostList.size(); 
} 
+3

Son parce que votre 'Contextor' n'a pas un contexte, d'abord lui donner un contexte alors obtenir à partir de là. –

+0

où avez-vous init votre Contextor – 6155031

Répondre

3

Pourquoi ce contexte est toujours revenu nul?

parce que vous n'appelez jamais init(Context context) sur Contextor.getInstance(). BTW, il semble un peu exagéré d'avoir cet objet lorsque vous pouvez facilement assigner parent.getContext()-mContext

+0

Merci @Blackbelt C'est mon erreur. Résolu – LIPONEF

0

Son parce que votre Contextor n'a pas de contexte, d'abord lui donner un contexte alors obtenir à partir de là.

Je suggère d'utiliser l'adaptateur de contructor comme ce

Context ctx; 

public RecyclerViewNewfeedAdapter(List<Post> mPostList, Context context) { 
    this.mPostList = mPostList; 
    this.ctx = context; 
}