attempt to display details in another Activity "java.lang.IndexOutOfBoundsException: Index: 0, Size: 0"

huangapple go评论88阅读模式
英文:

attempt to display details in another Activity "java.lang.IndexOutOfBoundsException: Index: 0, Size: 0"

问题

以下是您提供的代码的中文翻译:

  1. 我正试图使用OnItemClick来在用户个人资料页面中显示详细信息但我仍然遇到以下错误
  2. java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
  3. at java.util.ArrayList.get(ArrayList.java:437)
  4. at fr.ousoft.suiviemedsbox.ScrollingActivity.OnItemClick(ScrollingActivity.java:102)
  5. at fr.ousoft.suiviemedsbox.UsersAdapter$AdapterVH$1.onClick(UsersAdapter.java:115)
  6. 以下是我的Activity代码
  7. public class ScrollingActivity extends AppCompatActivity implements UsersAdapter.OnItemClickListener {
  8. public static final String EXTRA_CREATOR_NOM = "Nom";
  9. public static final String EXTRA_CREATOR_PRENOM = "Prenom";
  10. public static final String EXTRA_CREATOR_TEL = "Tel";
  11. public static final String EXTRA_CREATOR_EMAIL = "Email";
  12. public static final String EXTRA_CREATOR_ETABLISSEMENT = "Etablissement";
  13. public static final String EXTRA_CREATOR_TYPE = "Type";
  14. public static final String EXTRA_CREATOR_ACTIVE = "Active";
  15. RecyclerView recyclerView;
  16. ApiInterface apiInterface;
  17. UsersAdapter usersAdapter;
  18. ArrayList<User> mListe = new ArrayList<>();
  19. @Override
  20. protected void onCreate(Bundle savedInstanceState) {
  21. super.onCreate(savedInstanceState);
  22. setContentView(R.layout.activity_scrolling);
  23. Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
  24. setSupportActionBar(toolbar);
  25. CollapsingToolbarLayout toolBarLayout = (CollapsingToolbarLayout) findViewById(R.id.toolbar_layout);
  26. toolBarLayout.setTitle(getTitle());
  27. FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
  28. fab.setOnClickListener(new View.OnClickListener() {
  29. @Override
  30. public void onClick(View view) {
  31. Intent intent = new Intent(ScrollingActivity.this, RegisterActivity.class);
  32. startActivity(intent);
  33. }
  34. });
  35. recyclerView = findViewById(R.id.recyclerViewList);
  36. recyclerView.setLayoutManager(new LinearLayoutManager(this));
  37. recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
  38. usersAdapter = new UsersAdapter();
  39. fetchUsers();
  40. }
  41. public void fetchUsers(){
  42. apiInterface = ApiClient.getRetrofitInstance().create(ApiInterface.class);
  43. Call<List<User>> call = apiInterface.getAllUsers();
  44. call.enqueue(new Callback<List<User>>() {
  45. @Override
  46. public void onResponse(Call<List<User>> call, Response<List<User>> response) {
  47. if (response.isSuccessful()){
  48. List<User> users = response.body();
  49. usersAdapter.setData(users);
  50. usersAdapter.setOnItemClickListener(ScrollingActivity.this);
  51. recyclerView.setAdapter(usersAdapter);
  52. }
  53. }
  54. @Override
  55. public void onFailure(Call<List<User>> call, Throwable t) {
  56. Log.e("success", t.getLocalizedMessage());
  57. }
  58. });
  59. }
  60. @Override
  61. public void OnItemClick(int position) {
  62. Intent detailIntent = new Intent(this, DetailActivity.class);
  63. User clickedUser = mListe.get(position);
  64. detailIntent.putExtra(EXTRA_CREATOR_NOM, clickedUser.getNom());
  65. detailIntent.putExtra(EXTRA_CREATOR_PRENOM, clickedUser.getPrenom());
  66. detailIntent.putExtra(EXTRA_CREATOR_TEL, clickedUser.getTel());
  67. detailIntent.putExtra(EXTRA_CREATOR_EMAIL, clickedUser.getEmail());
  68. detailIntent.putExtra(EXTRA_CREATOR_ETABLISSEMENT, clickedUser.getEtablissement());
  69. detailIntent.putExtra(EXTRA_CREATOR_TYPE, clickedUser.getType());
  70. detailIntent.putExtra(EXTRA_CREATOR_ACTIVE, clickedUser.getActive());
  71. startActivity(detailIntent);
  72. }
  73. }

适配器:

  1. public class UsersAdapter extends RecyclerView.Adapter<UsersAdapter.AdapterVH>{
  2. private List<User> userList;
  3. private Context context;
  4. private OnItemClickListener mListener;
  5. public interface OnItemClickListener {
  6. void OnItemClick(int position);
  7. }
  8. public void setOnItemClickListener(OnItemClickListener listener){
  9. mListener = listener;
  10. }
  11. public UsersAdapter(){
  12. }
  13. public void setData(List<User> userList){
  14. this.userList = userList;
  15. notifyDataSetChanged();
  16. }
  17. @NonNull
  18. @Override
  19. public AdapterVH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
  20. context = parent.getContext();
  21. return new UsersAdapter.AdapterVH(LayoutInflater.from(context).inflate(R.layout.item_list, parent, false));
  22. }
  23. @SuppressLint("ResourceAsColor")
  24. @Override
  25. public void onBindViewHolder(@NonNull AdapterVH holder, int position) {
  26. User user = userList.get(position);
  27. String nom = user.getNom();
  28. String email = user.getEmail();
  29. String etab = user.getEtablissement();
  30. String active = user.getActive();
  31. String prenom = user.getPrenom();
  32. holder.txtNom.setText(nom);
  33. if (nom == null) {
  34. holder.txtNom.setText("Aucun Nom");
  35. }
  36. holder.txtEmail.setText(email);
  37. if (email == null) {
  38. holder.txtEmail.setText("Aucun Email");
  39. }
  40. holder.txtEttab.setText(etab);
  41. if (etab == null) {
  42. holder.txtEttab.setText("Aucun Etablissement");
  43. }
  44. holder.txtPrenom.setText(prenom);
  45. if (prenom == null) {
  46. holder.txtPrenom.setText("Aucun Prenom");
  47. }
  48. if (active == null) {
  49. holder.ActiveDesactive.setText(R.string.desact);
  50. } else {
  51. holder.ActiveDesactive.setText(R.string.activ);
  52. }
  53. }
  54. @Override
  55. public int getItemCount() {
  56. return userList.size();
  57. }
  58. public class AdapterVH extends RecyclerView.ViewHolder {
  59. TextView txtNom;
  60. TextView txtPrenom;
  61. TextView txtEmail;
  62. TextView txtEttab;
  63. Button ActiveDesactive;
  64. public AdapterVH(@NonNull View itemView) {
  65. super(itemView);
  66. txtNom = itemView.findViewById(R.id.NomUser);
  67. txtPrenom = itemView.findViewById(R.id.PrenomUser);
  68. txtEmail = itemView.findViewById(R.id.EmailUser);
  69. txtEttab = itemView.findViewById(R.id.EtabUser);
  70. ActiveDesactive = itemView.findViewById(R.id.ActiveDesavtive);
  71. itemView.setOnClickListener(new View.OnClickListener() {
  72. @Override
  73. public void onClick(View v) {
  74. if (mListener != null){
  75. int positions = getAdapterPosition();
  76. if (positions != RecyclerView.NO_POSITION){
  77. mListener.OnItemClick(positions);
  78. }
  79. }
  80. }
  81. });
  82. }
  83. }
  84. }
英文:

I'm trying to use OnItemClick to display details in a user profile page and I still have this error:

  1. java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
  2. at java.util.ArrayList.get(ArrayList.java:437)
  3. at fr.ousoft.suiviemedsbox.ScrollingActivity.OnItemClick(**ScrollingActivity.java:102**)
  4. at fr.ousoft.suiviemedsbox.UsersAdapter$AdapterVH$1.onClick(**UsersAdapter.java:115**)

Here is my Activity code

  1. public class ScrollingActivity extends AppCompatActivity implements UsersAdapter.OnItemClickListener {
  2. public static final String EXTRA_CREATOR_NOM = &quot;Nom&quot;;
  3. public static final String EXTRA_CREATOR_PRENOM = &quot;Prenom&quot;;
  4. public static final String EXTRA_CREATOR_TEL = &quot;Tel&quot;;
  5. public static final String EXTRA_CREATOR_EMAIL = &quot;Email&quot;;
  6. public static final String EXTRA_CREATOR_ETABLISSEMENT = &quot;Etablissement&quot;;
  7. public static final String EXTRA_CREATOR_TYPE = &quot;Type&quot;;
  8. public static final String EXTRA_CREATOR_ACTIVE = &quot;Active&quot;;
  9. RecyclerView recyclerView;
  10. ApiInterface apiInterface;
  11. UsersAdapter usersAdapter;
  12. ArrayList&lt;User&gt; mListe = new ArrayList&lt;&gt;();
  13. @Override
  14. protected void onCreate(Bundle savedInstanceState) {
  15. super.onCreate(savedInstanceState);
  16. setContentView(R.layout.activity_scrolling);
  17. Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
  18. setSupportActionBar(toolbar);
  19. CollapsingToolbarLayout toolBarLayout = (CollapsingToolbarLayout) findViewById(R.id.toolbar_layout);
  20. toolBarLayout.setTitle(getTitle());
  21. FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
  22. fab.setOnClickListener(new View.OnClickListener() {
  23. @Override
  24. public void onClick(View view) {
  25. Intent intent = new Intent(ScrollingActivity.this, RegisterActivity.class);
  26. startActivity(intent);
  27. }
  28. });
  29. recyclerView = findViewById(R.id.recyclerViewList);
  30. recyclerView.setLayoutManager(new LinearLayoutManager(this));
  31. recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
  32. usersAdapter = new UsersAdapter();
  33. fetchUsers();
  34. }
  35. public void fetchUsers(){
  36. apiInterface = ApiClient.getRetrofitInstance().create(ApiInterface.class);
  37. Call&lt;List&lt;User&gt;&gt; call = apiInterface.getAllUsers();
  38. call.enqueue(new Callback&lt;List&lt;User&gt;&gt;() {
  39. @Override
  40. public void onResponse(Call&lt;List&lt;User&gt;&gt; call, Response&lt;List&lt;User&gt;&gt; response) {
  41. if (response.isSuccessful()){
  42. List&lt;User&gt; users = response.body();
  43. usersAdapter.setData(users);
  44. usersAdapter.setOnItemClickListener(ScrollingActivity.this);
  45. recyclerView.setAdapter(usersAdapter);
  46. }
  47. }
  48. @Override
  49. public void onFailure(Call&lt;List&lt;User&gt;&gt; call, Throwable t) {
  50. Log.e(&quot;success&quot;, t.getLocalizedMessage());
  51. }
  52. });
  53. }
  54. @Override
  55. public void OnItemClick(int position) {
  56. Intent detailIntent = new Intent(this,DetailActivity.class);
  57. User clickedUser = mListe.get(position);
  58. detailIntent.putExtra(EXTRA_CREATOR_NOM, clickedUser.getNom());
  59. detailIntent.putExtra(EXTRA_CREATOR_PRENOM, clickedUser.getPrenom());
  60. detailIntent.putExtra(EXTRA_CREATOR_TEL, clickedUser.getTel());
  61. detailIntent.putExtra(EXTRA_CREATOR_EMAIL, clickedUser.getEmail());
  62. detailIntent.putExtra(EXTRA_CREATOR_ETABLISSEMENT, clickedUser.getEtablissement());
  63. detailIntent.putExtra(EXTRA_CREATOR_TYPE, clickedUser.getType());
  64. detailIntent.putExtra(EXTRA_CREATOR_ACTIVE, clickedUser.getActive());
  65. startActivity(detailIntent);
  66. }
  67. }

Adapter:

  1. public class UsersAdapter extends RecyclerView.Adapter&lt;UsersAdapter.AdapterVH&gt;{
  2. private List&lt;User&gt; userList;
  3. private Context context;
  4. private OnItemClickListener mListener;
  5. public interface OnItemClickListener {
  6. void OnItemClick(int position);
  7. }
  8. public void setOnItemClickListener(OnItemClickListener listener){
  9. mListener = listener;
  10. }
  11. public UsersAdapter(){
  12. }
  13. public void setData(List&lt;User&gt; userList){
  14. this.userList = userList;
  15. notifyDataSetChanged();
  16. }
  17. @NonNull
  18. @Override
  19. public AdapterVH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
  20. context = parent.getContext();
  21. return new UsersAdapter.AdapterVH(LayoutInflater.from(context).inflate(R.layout.item_list,parent,false));
  22. }
  23. @SuppressLint(&quot;ResourceAsColor&quot;)
  24. @Override
  25. public void onBindViewHolder(@NonNull AdapterVH holder, int position) {
  26. User user = userList.get(position);
  27. String nom = user.getNom();
  28. String email = user.getEmail();
  29. String etab = user.getEtablissement();
  30. String active = user.getActive();
  31. String prenom = user.getPrenom();
  32. holder.txtNom.setText(nom);
  33. if (nom == null) {
  34. holder.txtNom.setText(&quot;Aucun Nom&quot;);
  35. }
  36. holder.txtEmail.setText(email);
  37. if (email == null) {
  38. holder.txtEmail.setText(&quot;Aucun Email&quot;);
  39. }
  40. holder.txtEttab.setText(etab);
  41. if (etab == null) {
  42. holder.txtEttab.setText(&quot;Aucun Etablissement&quot;);
  43. }
  44. holder.txtPrenom.setText(prenom);
  45. if (prenom == null) {
  46. holder.txtPrenom.setText(&quot;Aucun Prenom&quot;);
  47. }
  48. if (active == null) {
  49. holder.ActiveDesactive.setText(R.string.desact);
  50. }else {
  51. holder.ActiveDesactive.setText(R.string.activ);
  52. }
  53. }
  54. @Override
  55. public int getItemCount() {
  56. return userList.size();
  57. }
  58. public class AdapterVH extends RecyclerView.ViewHolder{
  59. TextView txtNom;
  60. TextView txtPrenom;
  61. TextView txtEmail;
  62. TextView txtEttab;
  63. Button ActiveDesactive;
  64. public AdapterVH(@NonNull View itemView) {
  65. super(itemView);
  66. txtNom = itemView.findViewById(R.id.NomUser);
  67. txtPrenom = itemView.findViewById(R.id.PrenomUser);
  68. txtEmail = itemView.findViewById(R.id.EmailUser);
  69. txtEttab = itemView.findViewById(R.id.EtabUser);
  70. ActiveDesactive = itemView.findViewById(R.id.ActiveDesavtive);
  71. itemView.setOnClickListener(new View.OnClickListener() {
  72. @Override
  73. public void onClick(View v) {
  74. if (mListener != null){
  75. int positions = getAdapterPosition();
  76. if (positions != RecyclerView.NO_POSITION){
  77. mListener.OnItemClick(positions);
  78. }
  79. }
  80. }
  81. });
  82. }
  83. }
  84. }

答案1

得分: 0

你在 ArrayList&lt;User&gt; mListe = new ArrayList&lt;&gt;(); 这行代码中没有添加任何内容。

在执行任何操作之前,你应该先添加数值,

试试这个:

  1. if (response.isSuccessful()){
  2. List&lt;User&gt; users = response.body();
  3. mListe.addAll(users);
  4. usersAdapter.setData(users);
  5. usersAdapter.setOnItemClickListener(ScrollingActivity.this);
  6. recyclerView.setAdapter(usersAdapter);
  7. }
英文:

you are not adding anything in ArrayList&lt;User&gt; mListe = new ArrayList&lt;&gt;();

you should add values before implementing any action,

try this

  1. if (response.isSuccessful()){
  2. List&lt;User&gt; users = response.body();
  3. mListe.addAll(users);
  4. usersAdapter.setData(users);
  5. usersAdapter.setOnItemClickListener(ScrollingActivity.this);
  6. recyclerView.setAdapter(usersAdapter);
  7. }

答案2

得分: 0

你从未为mListe添加任何内容。如果你搜索mListe.,唯一的匹配项是mListe.get。你没有调用过mListe.add或者mListe.addAll。相反,你是直接将响应中的列表内容设置到适配器中:

  1. if (response.isSuccessful()){
  2. // 这里是错误的地方
  3. List<User> users = response.body();
  4. usersAdapter.setData(users);
  5. usersAdapter.setOnItemClickListener(ScrollingActivity.this);
  6. recyclerView.setAdapter(usersAdapter);
  7. }

应该采取以下步骤代替:

  1. 清除mListe中的任何旧内容;
  2. 填充新内容;
  3. 将新数据设置到适配器中。
  1. if (response.isSuccessful()){
  2. mListe.clear();
  3. mListe.addAll(response.body());
  4. usersAdapter.setData(mListe);
  5. }

我从这个if语句中删除了几行,并将它们移到了onCreate方法中。它们应该只被调用一次,如果你再次调用fetchUsers(),设置相同的适配器和点击监听器是没有好处的。

  1. @Override
  2. protected void onCreate(Bundle savedInstanceState) {
  3. ...
  4. usersAdapter = new UsersAdapter();
  5. usersAdapter.setOnItemClickListener(this);
  6. recyclerView.setAdapter(usersAdapter);
  7. fetchUsers();
  8. }
英文:

You never fill mListe with any content. If you search for mListe. the only match you get is mListe.get. You have no invocations of mListe.add or mListe.addAll. What you do instead is set a list from a response directly into the adapter:

  1. if (response.isSuccessful()){
  2. // Here is the error
  3. List&lt;User&gt; users = response.body();
  4. usersAdapter.setData(users);
  5. usersAdapter.setOnItemClickListener(ScrollingActivity.this);
  6. recyclerView.setAdapter(usersAdapter);
  7. }

What should be done instead is the following:

  1. Clear mListe from any previous content;
  2. Fill with new content;
  3. Set new data to the adapter.
  1. if (response.isSuccessful()){
  2. mListe.clear();
  3. mListe.addAll(response.body());
  4. usersAdapter.setData(mListe);
  5. }

I have removed a few lines from this if-statement and moved them into the onCreate. They should be called only once, there is no benefit setting the same adapter and click listener if you call fetchUsers() again.

  1. @Override
  2. protected void onCreate(Bundle savedInstanceState) {
  3. ...
  4. usersAdapter = new UsersAdapter();
  5. usersAdapter.setOnItemClickListener(this);
  6. recyclerView.setAdapter(usersAdapter);
  7. fetchUsers();
  8. }

huangapple
  • 本文由 发表于 2020年9月23日 23:00:27
  • 转载请务必保留本文链接:https://go.coder-hub.com/64030798.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定