alPlayerRoles.addAll(responseModel.getData().prModel);
playerAdapter = new PlayerDetailsAdapter(PlayerDetailsActivity.this, alPlayerRoles);
lvPlayerRoles.setAdapter(playerAdapter);
This is the code in my main thread that I use to initialize the adapter and set it on a ListView by adding an ArrayList containing an object from a model I've created.
alPlayerRoles
is the ArrayList that gets passed as data to the adapter initialization and it has all the correct values. Checked it with the debugger.
Here's the entire Adapter class too:
private Activity activity;
public ArrayList<PlayerRolesModel> playerDetails = new ArrayList<>();
Context context;
private LayoutInflater mInflater;
public PlayerDetailsAdapter(Activity activity, ArrayList<PlayerRolesModel> playerDetails) {
super(activity, 0, playerDetails);
this.playerDetails = playerDetails;
this.activity = activity;
}
@Override
public PlayerRolesModel getItem(int position) {
return playerDetails.get(position);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder vh;
if (convertView == null) {
View view = mInflater.inflate(R.layout.player_details_row, parent, false);
vh = ViewHolder.create((RelativeLayout) view);
view.setTag(vh);
} else {
vh = (ViewHolder) convertView.getTag();
}
PlayerRolesModel item = getItem(position);
PlayerRolesModelTeam team = item.prmTeam;
vh.tvRoleSeason.setText(item.startDate.substring(0,3) + "-" + item.endDate.substring(0,3));
vh.tvRoleTeam.setText(team.prmTeamName);
vh.tvRoleContractType.setText(item.Type);
vh.ivTeamLogoImage.setImageResource(R.drawable.ic_launcher);
return vh.rootView;
}
private static class ViewHolder {
public final RelativeLayout rootView;
public final TextView tvRoleSeason;
public final TextView tvRoleTeam;
public final TextView tvRoleContractType;
public final ImageView ivTeamLogoImage;
private ViewHolder(RelativeLayout rootView, TextView tvRoleSeason, TextView tvRoleTeam, TextView tvRoleContractType, ImageView ivTeamLogoImage) {
this.rootView = rootView;
this.tvRoleSeason = tvRoleSeason;
this.tvRoleTeam =tvRoleTeam;
this.tvRoleContractType = tvRoleContractType;
this.ivTeamLogoImage = ivTeamLogoImage;
}
public static ViewHolder create(RelativeLayout rootView) {
TextView tvRoleSeason = (TextView) rootView.findViewById(R.id.tvRoleSeason);
TextView tvRoleTeam = (TextView) rootView.findViewById(R.id.tvRoleTeam);
TextView tvRoleContractType = (TextView) rootView.findViewById(R.id.tvRoleContractType);
ImageView ivTeamLogoImage = (ImageView) rootView.findViewById(R.id.ivTeamLogoImage);
return new ViewHolder(rootView, tvRoleSeason, tvRoleTeam, tvRoleContractType, ivTeamLogoImage);
}
}
I've used the same template many times before for adapters and it always worked, no problem, but this time I'm getting the above-mentioned error. Does that mean that data is somehow passed as an empty ArrayList or something else isn't properly initialized?
EDIT: Stacktrace
FATAL EXCEPTION: main
Process: bahisadam.com.bahisadam, PID: 21210
java.lang.NullPointerException
at com.bahisadam.view.PlayerDetailsActivity$1.onResponse(PlayerDetailsActivity.java:155)
at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:68)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5124)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:613)
at dalvik.system.NativeStart.main(Native Method)