无法将数据发送到 recyclerview

Posted

技术标签:

【中文标题】无法将数据发送到 recyclerview【英文标题】:Not able to send data to recyclerview 【发布时间】:2021-04-27 12:49:24 【问题描述】:

我有一个问题,关于如何显示我使用改造的发布请求从服务器获取的数据。这是我想在回收站视图中显示“配置文件”的 json 数据。我正在向服务器发送一个字符串以获取数据。


    "status": 200,
    "profile": 
        "firstName": "nelli",
        "lastName": "jhilmil",
        "gender": "Female",
        "addressLine": "Club",
        "city": "Delhi",
        "pincode": "560100",
        "phoneNumber": "2423232344",
        "userId": 50,
        "createdByAdmin": false
    

这是响应 json

public class ProfileResponse 

    @SerializedName("status")
    @Expose
    private Status status;

    @SerializedName("profile")
    @Expose
    private Profile profile;
    getters and setters...

下面是子模型类。

 public class Profile 
    @PrimaryKey
    @SerializedName("userId")
    @Expose
    private Integer userId;
    @SerializedName("firstName")
    @ColumnInfo(name = "firstName")
    private String firstName;
    @SerializedName("surname")
    @Expose
    @ColumnInfo(name = "surname")
    private String surname;
    @SerializedName("gender")
    @Expose
    @ColumnInfo(name = "gender")
    private String gender;
    @SerializedName("phoneNumber")
    @Expose
    @ColumnInfo(name = "phoneNumber")
    private String phoneNumber;
    @SerializedName("addressLine")
    @Expose
    @ColumnInfo(name = "addressLine")
    private String addressLine1;
    @SerializedName("city")
    @Expose
    @ColumnInfo(name = "city")
    private String city;
    @SerializedName("pincode")
    @Expose
    @ColumnInfo(name = "pincode")
    private String pincode;
    @SerializedName("createbyAdmin")
    @Expose
    @ColumnInfo(name = "createbyAdmin")
    private Boolean createdByAdmin;
    getters and setters....

以下是使用 post 方法向服务器发送字符串以获取数据的调用

@POST("user/getProfile")
Call<ProfileResponse> getData(@Body JsonObject jsonObject);

下面是适配器代码,我不知道要以列表形式发送什么以作为数组列表发送以将数据发送到适配器

public class ProfileAdapter extends RecyclerView.Adapter<ProfileAdapter.ProfileViewHolder> 
private Context context;
private  List<ProfileResponse> profiles;

    public ProfileAdapter(Context context, List<ProfileResponse> profiles) 
        this.context = context;
        this.profiles = profiles;
    


    @Override
    public ProfileViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) 
      LayoutInflater inflater = LayoutInflater.from(context);
      View view = inflater.inflate(R.layout.get_profile_items, parent, false);
      return new ProfileViewHolder(view);
    

    @Override
    public void onBindViewHolder(@NonNull ProfileViewHolder holder, int position) 

这是我从服务器发送和获取数据的改造调用

     jsonObj.addProperty("role", String.valueOf(ADMIN));

            Call<ProfileResponse> profResponse = AppAuthClient.geVuAPIServices().getData(jsonObj);
            profResponse.enqueue(new Callback<ProfileResponse>() 
                @Override
                public void onResponse(Call<ProfileResponse>call, retrofit2.Response<ProfileResponse>response) 
//                    mProgressBar.setVisibility(View.GONE);
                    if(response.isSuccessful() && response.body() != null) 

                              ???????????
        
                        Toast.makeText(GetProfile.this, "success", Toast.LENGTH_SHORT);
                    

我正在从服务器获取数据,但无法将获取的数据从服务器发送到 recyclerview。非常感谢任何帮助,谢谢。

更新问题

这就是我在我的活动中初始化适配器的方式

  getData();
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getApplicationContext(), LinearLayoutManager.VERTICAL, false);
    recyclerView.setLayoutManager(linearLayoutManager);

【问题讨论】:

您应该调用 API 来获取活动中的数据。在 tjis 活动中定义和初始化适配器 我更新了我的问题@Sarah,我能够在调用 api 时从服务器获取数据,我什至在同一活动中初始化了适配器,但我对我在改造响应中发送的内容一无所知 【参考方案1】:

首先,您有适配器 (ProfileAdapter.class) 可以在 RecyclerView 中显示多个 ProfileResponse 对象,但您的调用/请求中只有一个 ProfileResponse。 这可能不是显示用户个人资料的最佳方式,但如果你真的想要,请遵循此

将此方法添加到 ProfileAdapter.class

public void swapData(List<?> newItems) 
        if (newItems != null) 
            this.profiles = newItems;
            notifyDataSetChanged();
        
    

替换已编辑的代码:

recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext(), LinearLayoutManager.VERTICAL, false));
adapter  = new ProfileAdapter(getApplicationContext(), new ArrayList<>()); //TODO create filed ProfileAdapter adapter
recyclerView.setAdapter(adapter);

getData();

和 onResponse 方法中的 swapData

@Override
    public void onResponse(Call<ProfileResponse>call, retrofit2.Response<ProfileResponse>response) 
//                    mProgressBar.setVisibility(View.GONE);
        if(response.isSuccessful() && response.body() != null) 

           //TODO adapter.swapDate(response.body / ProfileResponse) 

            Toast.makeText(GetProfile.this, "success", Toast.LENGTH_SHORT);
        
    

最好为没有 RecyclerView 的用户配置文件创建一个特殊的视图并更新它。如果您想在列表中显示更多个人资料,请随时在下面发表评论...

【讨论】:

感谢您的回答。尽管我的问题尚未解决,但我会将您的答案标记为已接受。你是对的,我传递的是单个对象而不是数组列表。【参考方案2】:

你在哪里将适配器设置为这样的recyclerview:

recyclerView.setAdapter(adapter);

我想你忘了设置适配器,如果你这样做了, 您说您从服务器获取数据但无法发送到recyclerview 对!那么你可以这样做:

  // Get the response from response.body() and save it in whatever your //response is typed(like your POJO class profileResponse)

//之后可以将这个profileResponse添加到arrayList中

    ArrayList<profileResponse> profileResponseList = new ArrayList();


if(response.isSuccessful() && response.body() != null) 

 profileResponse = response.body();
 
    profileResponseList.add(profileResponse);

                    Toast.makeText(GetProfile.this, "success", Toast.LENGTH_SHORT);
               

然后添加你可以通知适配器将该数据反映到recyclerview的结尾

    adapter.notifyDataSetChanged();

简单并将这些数据处理到适配器类中

【讨论】:

以上是关于无法将数据发送到 recyclerview的主要内容,如果未能解决你的问题,请参考以下文章

解析:ACL 无法将数据发送到服务器

Apps 脚本允许用户将数据发送到他们无法查看的电子表格?

无法将数据从 React 发送到 Springboot

无法将数据从 Stripe webhook 发送到 Firebase

我无法通过广播将数据发送到活动中的片段

无法将数据从视图发送到控制器 Action .NET MVC