2017-10-20 14 views
0

Chaque fois que je clique pour les nouvelles, il se bloque, au-dessous est LogCatJe crée une application de nouvelles avec l'API de NEWSAPI. chaque fois que je suis en cliquant sur les nouvelles, il se bloque

java.lang.NullPointerException: Tentative d'invoquer la méthode virtuelle « à long java.util.Date.getTime() » sur une référence d'objet null à com.jimdo.saifstudios.lynknews.Adapter.ListNewsAdapter.onBindViewHolder (ListNewsAdapter.java:105) à com.jimdo.saifstudios.lynknews.Adapter.ListNewsAdapter.onBindViewHolder (ListNewsAdapter.java:70)

ListNewsAdapter

class ListNewsViewHolder extends RecyclerView.ViewHolder implements 
View.OnClickListener 
{ 

ItemClickListener itemClickListener; 

TextView article_title; 
RelativeTimeTextView article_time; 
CircleImageView article_image; 

public ListNewsViewHolder(View itemView) { 
    super(itemView); 
    article_image = 
(CircleImageView)itemView.findViewById(R.id.article_image); 
    article_title = (TextView) itemView.findViewById(R.id.article_title); 
    article_time = (RelativeTimeTextView) 
itemView.findViewById(R.id.article_time); 

    itemView.setOnClickListener(this); 
} 

public void setItemClickListener(ItemClickListener itemClickListener) { 
    this.itemClickListener = itemClickListener; 
} 

public void setArticle_title(TextView article_title) { 
    this.article_title = article_title; 
} 

public void setArticle_time(RelativeTimeTextView article_time) { 
    this.article_time = article_time; 
} 

public void setArticle_image(CircleImageView article_image) { 
    this.article_image = article_image; 
} 

@Override 
public void onClick(View view) { 
    itemClickListener.onClick(view,getAdapterPosition(),false); 

} 
} 

public class ListNewsAdapter extends 
RecyclerView.Adapter<ListNewsViewHolder> 
{ 
private List<Article> articleList; 
private Context context; 

public ListNewsAdapter(List<Article> articleList, Context context) { 
    this.articleList = articleList; 
    this.context = context; 
} 

@Override 
public ListNewsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) 
{ 
    LayoutInflater inflater = LayoutInflater.from(parent.getContext()); 
    View itemView = inflater.inflate(R.layout.news_layout,parent,false); 
    return new ListNewsViewHolder(itemView); 
} 

@Override 
public void onBindViewHolder(ListNewsViewHolder holder, int position) { 

    Picasso.with(context) 
      .load(articleList.get(position).getUrlToImage()) 
      .into(holder.article_image); 
    if (articleList.get(position).getTitle().length() > 65) 
    holder.article_title.setText(articleList.get(position).getTitle().substring(0,65)+"..."); 
    else 
     holder.article_title.setText(articleList.get(position).getTitle()); 

    Date date=null; 
    try 
    { 
     date = ISO8601Parse.parse(articleList.get(position).getPublishedAt()); 
    }catch (ParseException ex) 
    { 
     ex.printStackTrace(); 
    } 
    holder.article_time.setReferenceTime(date.getTime()); 

    // Set event click 
    holder.setItemClickListener(new ItemClickListener() { 
     @Override 
     public void onClick(View view, int position, boolean isLongClick) { 
      Intent detail = new Intent(context,DetailArticle.class); 
      detail.putExtra("webURL",articleList.get(position).getUrl()); 
      detail.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      context.startActivity(detail); 



     } 
    }); 

} 

@Override 
public int getItemCount() { 
    return articleList.size(); 
} 
} 
+0

Alors, où utilisez-vous getTime()? Et qu'est-ce qui serait alors nul? Et s'il y a une prise ... Faut-il la négliger? Ou quoi? Informer l'utilisateur peut-être? Et est-il intelligent alors de continuer comme s'il n'y avait pas eu de prise? – greenapps

Répondre

0

Votre objet date est null. Vous faites date.getTime() sans vérifier si elle est nulle. Déplacez votre holder.article_time.setReferenceTime (date.getTime) dans le bloc try sous la date et vous ne devriez plus planter.

Ensuite, vous devez comprendre ce qui ne va pas avec la façon dont vous analysez la date pour commencer.

+0

Toujours le même problème – Saif

+0

Vous avez attendu un mois pour répondre lol, ne doit pas être trop gros d'une priorité. Vous avez seulement une ligne de code qui a la date tirée. ava.lang.NullPointerException: Tentative d'invocation de la méthode virtuelle 'long java.util.Date.getTime()' qui pourrait provoquer cette erreur. S'il vous plaît fournir votre code mis à jour montrant que vous avez fait ma suggestion et ensuite fournir votre erreur mise à jour. Si vous le mettez dans un bloc try/catch, il n'est pas possible de planter car le "catch" l'attraperait, sauf si vous plantez dans une autre classe que vous n'avez pas partagée. Alors mettez à jour votre question si c'est une priorité pour vous et je suis heureux de vous aider – Sam

+0

Désolé j'ai eu mes examens donc je n'ai pas ouvert mon travail. et je suis un débutant. C'est le lien du projet studio Android (https://drive.google.com/open?id=1ZKyM5yZM017iSEA8jNWP3ejwhAuNRDEd) – Saif

0

vous avez un problème à

holder.article_time.setReferenceTime(date.getTime()); 

la variable de date null il n'est pas initialisé si vous avez encore problème à

ISO8601Parse.parse(articleList.get(position).getPublishedAt()); 

il jette ParseException vérifier.

+0

ok, je vais vérifier maintenant. – Saif