如何在 Android 的 Retrofit 中将另一个数据设置到构造函数 DataModel 中

How can i set another data into constructor DataModel in Retrofit in Android

在我的应用程序中,我应该从服务器加载数据,为此我使用 Retrofit 库。
在我的应用程序中,我想从服务器加载字符串数据,我应该从加载图像 ]可绘制文件夹 .
我可以从服务器加载字符串并在 textview 上显示它,但是当添加图像时我不知道该怎么做?!
数据模型:

public class Retrofit_ColoniesModel {

    //Load from server
    @SerializedName("id")
    private Integer id;
    @SerializedName("slug")
    private String slug;
    @SerializedName("title")
    private String title;
    @SerializedName("description")
    private String description;
    @SerializedName("parent")
    private Integer parent;
    @SerializedName("post_count")
    private Integer post_count;

    //Load from local
    private int[] image;

    public Retrofit_ColoniesModel(Integer id, String slug, String title, String description, Integer parent, Integer post_count,
                                  int[] image) {
        this.id = id;
        this.slug = slug;
        this.title = title;
        this.description = description;
        this.parent = parent;
        this.post_count = post_count;
        this.image = image;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getSlug() {
        return slug;
    }

    public void setSlug(String slug) {
        this.slug = slug;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public Integer getParent() {
        return parent;
    }

    public void setParent(Integer parent) {
        this.parent = parent;
    }

    public Integer getPost_count() {
        return post_count;
    }

    public void setPost_count(Integer post_count) {
        this.post_count = post_count;
    }

    public int[] getImage() {
        return image;
    }

    public void setImage(int[] image) {
        this.image= image;
    }

数据模型响应:

public class Retrofit_ColoniesModelResponse {

    @SerializedName("status")
    private String status;
    @SerializedName("count")
    private int count;
    @SerializedName("categories")
    private List<Retrofit_ColoniesModel> categories;


    public List<Retrofit_ColoniesModel> getCategories() {
        return categories;
    }

    public void setCategories(List<Retrofit_ColoniesModel> categories) {
        this.categories = categories;
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

}

改造代码在activity:

// Retrofit //////////
Retrofit_ApiInterface apiInterface = Retrofit_ApiClient.getClient().create(Retrofit_ApiInterface.class);
Call<Retrofit_ColoniesModelResponse> call = apiInterface.getResponse();

call.enqueue(new Callback<Retrofit_ColoniesModelResponse>() {
    @Override
    public void onResponse(Call<Retrofit_ColoniesModelResponse> call, Response<Retrofit_ColoniesModelResponse> response) {
        List<Retrofit_ColoniesModel> models = response.body().getCategories();

        mAdaper = new ColoniesAdapter(context, models);
        colonies_RecyclerView.setAdapter(mAdaper);
    }

    @Override
    public void onFailure(Call<Retrofit_ColoniesModelResponse> call, Throwable t) {

    }
});
//////////////////////

我想将图片保存到数组中,例如:

                    final int[] colImages = {
                            R.drawable.colonies_image_food,
                            R.drawable.colonies_image_medical,
                            R.drawable.colonies_image_tecgnolegy,
                            R.drawable.colonies_image_entertenement,
                            R.drawable.colonies_image_car,
                            R.drawable.colonies_image_model,
                            R.drawable.colonies_image_sport,
                    };

适配器:

public class ColoniesAdapter extends RecyclerView.Adapter<ColoniesAdapter.ViewHolder> {

    private List<Retrofit_ColoniesModel> mDateSet;
    private Context mContext;
    private SparseBooleanArray expandState = new SparseBooleanArray();

    public ColoniesAdapter(Context context, List<Retrofit_ColoniesModel> dataSet) {
        this.mContext = context;
        this.mDateSet = dataSet;
        for (int i = 0; i < mDateSet.size(); i++) {
            expandState.append(i, false);
        }
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View view = LayoutInflater.from(mContext).inflate(R.layout.colonies_row, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, final int position) {

        holder.colonies_title.setText(mDateSet.get(position).getTitle());
        holder.colonies_title.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int pos = holder.getPosition();
                Retrofit_ColoniesModel model = mDateSet.get(pos);
                v.getContext().startActivity(new Intent(v.getContext(), Category_page.class)
                        .putExtra("categoryTitle", model.getTitle())
                        .putExtra("categoryID", model.getId()));
            }
        });

        Glide.with(mContext)
                .load(mDateSet.get(position).getImage()[position])
                .placeholder(R.drawable.post_image)
                .crossFade()
                .override(700, 400)
                .into(holder.colonies_image);

        holder.colonies_image.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int pos = holder.getPosition();
                Retrofit_ColoniesModel model = mDateSet.get(pos);
                v.getContext().startActivity(new Intent(v.getContext(), Category_page.class)
                        .putExtra("categoryTitle", model.getTitle())
                        .putExtra("categoryID", model.getId()));
            }
        });

        holder.colonies_description.setText(mDateSet.get(position).getDescription());
        holder.colonies_count.setText("مطالب موجود در کلونی : " + mDateSet.get(position).getPost_count());

        holder.expandableLayout.setInterpolator(mDateSet.get(position).getInterpolator());
        holder.expandableLayout.setExpanded(expandState.get(position));
        holder.expandableLayout.setListener(new ExpandableLayoutListenerAdapter() {
            @Override
            public void onPreOpen() {
                createRotateAnimator(holder.buttonLayout, 0f, 180f).start();
                expandState.put(position, true);
            }

            @Override
            public void onPreClose() {
                createRotateAnimator(holder.buttonLayout, 180f, 0f).start();
                expandState.put(position, false);
            }
        });
        holder.buttonLayout.setRotation(expandState.get(position) ? 180f : 0f);
        holder.buttonLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(final View v) {
                onClickButton(holder.expandableLayout);
            }
        });
    }

    private void onClickButton(final ExpandableLayout expandableLayout) {
        expandableLayout.toggle();
    }

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

    public void remove(int position) {
        mDateSet.remove(position);
        notifyItemRemoved(position);
    }

    public void clear() {
        mDateSet.clear();
        notifyDataSetChanged();
    }


    public void add(List<Retrofit_ColoniesModel> models) {
        mDateSet.addAll(models);
        notifyDataSetChanged();
    }

    public void update(List<Retrofit_ColoniesModel> models) {
        mDateSet.clear();
        mDateSet.addAll(models);
        notifyDataSetChanged();
    }

    public static class ViewHolder extends RecyclerView.ViewHolder {

        private TextView colonies_title, colonies_description, colonies_count;
        private ImageView colonies_image;
        private ExpandableLinearLayout expandableLayout;
        private RelativeLayout buttonLayout;

        public ViewHolder(View itemView) {
            super(itemView);

            colonies_title = (TextView) itemView.findViewById(R.id.colonies_colony_title_text);
            colonies_image = (ImageView) itemView.findViewById(R.id.colonies_cover_image);

            colonies_description = (TextView) itemView.findViewById(R.id.colonies_expandable_description_text);
            colonies_count = (TextView) itemView.findViewById(R.id.colonies_count_title_text);

            buttonLayout = (RelativeLayout) itemView.findViewById(R.id.colonies_expandable_button);
            expandableLayout = (ExpandableLinearLayout) itemView.findViewById(R.id.colonies_expandable_layout);

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {


/*                    v.getContext().startActivity(new Intent(v.getContext(), PostShow_page.class)
                            .putExtra("title", model.getTitle())
                            .putExtra("image", model.getThumbnail()));*/
                }
            });
        }
    }

    public ObjectAnimator createRotateAnimator(final View target, final float from, final float to) {
        ObjectAnimator animator = ObjectAnimator.ofFloat(target, "rotation", from, to);
        animator.setDuration(300);
        animator.setInterpolator(Utils.createInterpolator(Utils.LINEAR_INTERPOLATOR));
        return animator;
    }
}

我不知道如何将 int[] 添加到我的构造函数中,因为在改造中用 List<Retrofit_ColoniesModel> models = response.body().getCategories(); 填充构造函数。

我该如何解决我的问题?我真的需要这个教程,请帮助我。谢谢大家 <3

非静态嵌套类(内部类)

Java 中的非静态嵌套 classes 也称为内部 classes。内部 classes 与封闭 class 的实例相关联。因此,您必须首先创建封闭 class 的实例才能创建内部 class 的实例。这是内部 class 定义的示例:

public class Outer {

  public class Inner {
  }

}

以下是创建内部实例的方法 class:

Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();

注意如何在引用外部 class 之后放置 new 以创建内部 class.

的实例

非静态嵌套 classes(内部 classes)可以访问封闭 class 的字段,即使它们被声明为私有。这是一个例子:

如果图像数组是静态的(不依赖于服务器),那么您可以执行以下操作:

public class Retrofit_ColoniesModel {
...
private static final int[] colImages = {
                        R.drawable.colonies_image_food,
                        R.drawable.colonies_image_medical,
                        R.drawable.colonies_image_tecgnolegy,
                        R.drawable.colonies_image_entertenement,
                        R.drawable.colonies_image_car,
                        R.drawable.colonies_image_model,
                        R.drawable.colonies_image_sport,
                };

但是如果这个数组不是静态的(取决于服务器响应)那么我建议你映射到一个描述每个图像的字符串数组,服务器应该用这些字符串响应,例如:

"images":["IMAGE1", "IMAGE2"]

然后有一个助手 class 可以将这些字符串键映射到实际的 R.drawable 资源。

如果您需要示例代码,请告诉我。