Вывод подробной информации о пользователе. Retrofit

У меня такая проблема: Я получаю список пользователей отсюда и вывожу их в RecyclerView. С этим проблем нет. Проблемы начинаются при попытке получить подробную информацию и пользователе путем клика по элементу RecyclerView. В активити выводится информация не того пользователя, на которого нажали, а следующего или, в некоторых случаях, вообще рандомного. Как мне кажется, я неправильно передаю id пользователя их адаптера через intent

NetworkRequest

public class NetworkRequest {
    private static NetworkRequest request;
    public static final String BASE_URL = "https://api.github.com/";
    private Retrofit retrofit;

    private NetworkRequest() {
        retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    }

    public static NetworkRequest getRequest(){
        if(request == null){
            request = new NetworkRequest();
        }
        return request;
    }

    public GithubAPI getGithubApi(){
        return  retrofit.create(GithubAPI.class);
    }

    public UserAPI getUserApi(){
        return retrofit.create(UserAPI.class);
    }
}

Интерфейс для получения списка пользователей (GithubAPI)

public interface GithubAPI {
    @GET("/users")
    Call<ArrayList<GithubModel>> getGithubModel();
}

Интерфейс для получения данных об одном пользователе (UserAPI)

public interface UserAPI {
    @GET("users")
    Call<List<UserModel>> getUserInfo(@Query("login") String login);
}

Адаптер

public class UsersAdapter extends RecyclerView.Adapter<UsersAdapter.UsersAdapterViewHolder> {

Context context;
ArrayList<GithubModel> arrayList;

public UsersAdapter(Context context, ArrayList<GithubModel> arrayList) {
    this.context = context;
    this.arrayList = arrayList;
}

@NonNull
@Override
public UsersAdapterViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recycler_view, parent, false);
    return new UsersAdapterViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull final UsersAdapterViewHolder holder, int position) {
    GithubModel model = arrayList.get(position);
    holder.tvLogin.setText(model.getLogin());
    holder.tvText.setText(model.getReposUrl());
    holder.id = model.getId();

    Picasso.with(context).load(model.getAvatarUrl()).into(holder.image);

}

@Override
public int getItemCount() {
    return arrayList.size();
}

public class UsersAdapterViewHolder extends RecyclerView.ViewHolder {
    ImageView image;
    TextView tvLogin, tvText;
    int id;

    public UsersAdapterViewHolder(@NonNull final View itemView) {
        super(itemView);
        image = itemView.findViewById(R.id.image_item_recycler_view);
        tvLogin = itemView.findViewById(R.id.login_item_recycler_view);
        tvText = itemView.findViewById(R.id.text_item_recycler_view);

        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(context, UserActivity.class);
                intent.putExtra("login", tvLogin.getText().toString());
                intent.putExtra("id", id);
                context.startActivity(intent);
            }
        });

    }
}
}

MainActivity (здесь отображается список пользователей)

public class MainActivity extends AppCompatActivity {
TextView tvLogin, tvText;
ImageView image;
RecyclerView recyclerView;
LinearLayoutManager linearLayoutManager;
UsersAdapter usersAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    loadUsers();
}

public void loadUsers(){
    recyclerView = findViewById(R.id.recycler_view);
    linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
    recyclerView.setLayoutManager(linearLayoutManager);
    tvLogin = findViewById(R.id.login_item_recycler_view);
    tvText = findViewById(R.id.text_item_recycler_view);
    image = findViewById(R.id.image_item_recycler_view);

    NetworkRequest.getRequest()
            .getGithubApi()
            .getGithubModel()
            .enqueue(new Callback<ArrayList<GithubModel>>() {
                @Override
                public void onResponse(Call<ArrayList<GithubModel>> call, Response<ArrayList<GithubModel>> response) {
                    ArrayList<GithubModel> githubModels = response.body();

                    usersAdapter = new UsersAdapter(MainActivity.this, githubModels);
                    recyclerView.setAdapter(usersAdapter);
                }

                @Override
                public void onFailure(Call<ArrayList<GithubModel>> call, Throwable t) {
                    Toast.makeText(MainActivity.this, "Не удалось", Toast.LENGTH_SHORT).show();
                }
            });
}
}

UserActivity (здесь должна отображаться дополнительная информация о нажатом в RecyclerView пользователе)

public class UserActivity extends AppCompatActivity {
ImageView image;
TextView tvLogin, tvText, tv1, tv2, tv3, tv4;
String login;
int id;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_user);

    image = findViewById(R.id.image_item_user);
    tvLogin = findViewById(R.id.login_item_user);
    tvText = findViewById(R.id.text_item_user);
    tv1 = findViewById(R.id.text_view_1_item_user);
    tv2 = findViewById(R.id.text_view_2_item_user);
    tv3 = findViewById(R.id.text_view_3_item_user);
    tv4 = findViewById(R.id.text_view_4_item_user);

    //получаю логин и id пользователся на которого нажали в recyclerView
    Intent intent = getIntent();
    intent.getExtras();
    login = intent.getStringExtra("login");
    id = intent.getIntExtra("id", 0);
    getUserInfo(login, id);

}

public void getUserInfo(final String string, final int id) {
    NetworkRequest.getRequest()
            .getUserApi()
            .getUserInfo(string)
            .enqueue(new Callback<List<UserModel>>() {
                @Override
                public void onResponse(Call<List<UserModel>> call, Response<List<UserModel>> response) {
                    List<UserModel> userModel = response.body();

                    if (userModel != null){
                        tvLogin.setText(userModel.get(id).getLogin());
                        tvText.setText(userModel.get(id).getName());
                        tv1.setText(userModel.get(id).getReposUrl());
                        tv2.setText(userModel.get(id).getGravatarId());
                        tv3.setText(userModel.get(id).getNodeId());
                        tv4.setText(userModel.get(id).getEventsUrl());

                        Picasso.with(UserActivity.this).load(userModel.get(id).getAvatarUrl()).into(image);

                    }
                    else
                        Toast.makeText(UserActivity.this, "userModel пуст", Toast.LENGTH_SHORT).show();
                }

                @Override
                public void onFailure(Call<List<UserModel>> call, Throwable t) {
                        Toast.makeText(UserActivity.this, "Не удалось", Toast.LENGTH_SHORT).show();
                }
            });
}
}

Ответы (0 шт):