Ci-dessous mes extraits de code et mon panier de journaux. Le journal des erreurs me dirige vers cette ligne dans le code de la classe Adapter.NullPointerException Lorsque vous récupérez des icônes d'actualités dans l'affichage recycleur depuis l'URL et qu'une icône est manquante dans l'URL
if (response.body().getIcons().size() > 0)
studio spécifiquement android me met en garde contre que la condition getIcons()
a le potentiel de provoquer l'apparition de erreur de pointeur NULL.
package com.example.hamisi.sportsnewsultra.Model;
import java.util.List;
/**
* Created by hamisi on 10/6/17.
*/
public class IconBetterIdea {
private String url;
private List<Icon> icons;
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public List<Icon> getIcons() {
return icons;
}
public void setIcons(List<Icon> icons) {
this.icons = icons;
}
}
La classe d'icônes.
package com.example.hamisi.sportsnewsultra.Model;
/**
* Created by hamisi on 10/6/17.
*/
public class Icon {
private String url;
private int width,height,bytes;
private String format,sha1sum;
private Object error;
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public int getWidth() {
return width;
}
public void setWidth(int width) {
this.width = width;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
public int getBytes() {
return bytes;
}
public void setBytes(int bytes) {
this.bytes = bytes;
}
public String getFormat() {
return format;
}
public void setFormat(String format) {
this.format = format;
}
public String getSha1sum() {
return sha1sum;
}
public void setSha1sum(String sha1sum) {
this.sha1sum = sha1sum;
}
public Object getError() {
return error;
}
public void setError(Object error) {
this.error = error;
}
}
L'adaptateur. Voici où la ligne étant pointée vers moi par studio android comme la source de l'erreur est située.
package com.example.hamisi.sportsnewsultra.Adapter;
import android.content.Context;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.example.hamisi.sportsnewsultra.Common.Common;
import com.example.hamisi.sportsnewsultra.Interface.IconBetterIdeaService;
import com.example.hamisi.sportsnewsultra.Interface.ItemClickListener;
import com.example.hamisi.sportsnewsultra.ListNews;
import com.example.hamisi.sportsnewsultra.Model.IconBetterIdea;
import com.example.hamisi.sportsnewsultra.Model.WebSite;
import com.example.hamisi.sportsnewsultra.R;
import com.squareup.picasso.Picasso;
import de.hdodenhof.circleimageview.CircleImageView;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
/**
* Created by hamisi on 10/6/17.
*/
class ListSourceViewHolder extends RecyclerView.ViewHolder
implements View.OnClickListener
{
ItemClickListener itemClickListener;
TextView source_title;
CircleImageView source_image;
public ListSourceViewHolder(View itemView) {
super(itemView);
source_image = (CircleImageView) itemView.findViewById(R.id.source_image);
source_title = (TextView)itemView.findViewById(R.id.source_name);
itemView.setOnClickListener(this);
}
public void setItemClickListener(ItemClickListener itemClickListener) {
this.itemClickListener = itemClickListener;
}
@Override
public void onClick(View view) {
itemClickListener.onClick(view,getAdapterPosition(),false);
}
}
public class ListSourceAdapter extends RecyclerView.Adapter<ListSourceViewHolder>{
private Context context;
private WebSite webSite;
private IconBetterIdeaService mService;
public ListSourceAdapter(Context context, WebSite webSite) {
this.context = context;
this.webSite = webSite;
mService = Common.getIconService();
}
@Override
public ListSourceViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View itemView = inflater.inflate(R.layout.source_layout,parent,false);
return new ListSourceViewHolder(itemView);
}
@Override
public void onBindViewHolder(final ListSourceViewHolder holder, int position) {
StringBuilder iconBetterAPI = new StringBuilder("https://icons.better-idea.org/allicons.json?url=");
iconBetterAPI.append(webSite.getSources().get(position).getUrl());
mService.getIconUrl(iconBetterAPI.toString())
.enqueue(new Callback<IconBetterIdea>() {
@Override
public void onResponse(@NonNull Call<IconBetterIdea> call, @NonNull Response<IconBetterIdea> response) {
if (response.body().getIcons().size() > 0)
{
Picasso.with(context)
.load(response.body().getIcons().get(0).getUrl())
.into(holder.source_image);
}
}
@Override
public void onFailure(Call<IconBetterIdea> call, Throwable t) {
}
});
holder.source_title.setText(webSite.getSources().get(position).getName());
holder.setItemClickListener(new ItemClickListener() {
@Override
public void onClick(View view, int position, boolean isLongClick) {
Intent intent = new Intent(context, ListNews.class);
intent.putExtra("source", webSite.getSources().get(position).getId());
intent.putExtra("sortBy", webSite.getSources().get(position).getSortBysAvailable().get(0)); //get detail sort by method
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return webSite.getSources().size();
}
}
Le journal des erreurs est illustré ci-dessous.
10-11 11: 41: 47,328 27239-27239/com.example.hamisi.sportsnewsultra E/AndroidRuntime: FATAL EXCEPTION: principal processus: com.example.hamisi.sportsnewsultra, PID: 27239 java .lang.NullPointerException: tentative d'invoquer la méthode virtuelle 'java.util.List com.example.hamisi.sportsnewsultra.Model.IconBetterIdea.getIcons()' sur une référence d'objet null à com.example.hamisi.sportsnewsultra .Adapter.ListSourceAdapter $ 1.onResponse (ListSourceAdapter.java:88) a t retrofit2.ExecutorCallAdapterFactory $ ExecutorCallbackCall 1 1.run $ (ExecutorCallAdapterFactory.java:70) à android.os.Handler.handleCallback (Handler.java:815) à android.os.Handler.dispatchMessage (Handler.java:104) à android.os.Looper.loop (Looper.java:194) à android.app.ActivityThread.main (ActivityThread.java:5637) à java.lang.reflect.Method.invoke (Méthode natif) à java .lang.reflect.Method.invoke (Method.java:372) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:960) à com.android.internal.os.ZygoteInit.main (ZygoteInit.java:755)
@J Ramesh Merci beaucoup. Cela a fonctionné désolé je ne suis pas autorisé à upvote votre réponse en raison de ma mauvaise réputation. Mais je l'ai marqué comme la réponse. Dieu te bénisse. –
@ArossMickdad bienvenue frère ... pas de problème –