Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android RecyclerView不显示项目_Android_Android Recyclerview_Retrofit - Fatal编程技术网

Android RecyclerView不显示项目

Android RecyclerView不显示项目,android,android-recyclerview,retrofit,Android,Android Recyclerview,Retrofit,我有问题为什么RecyclerView不显示项目我不知道为什么不显示项目 json url [ { "id": 1, "title": "English", "photo": "en.png", "shortcut": "en" }, { "id": 2, "title": "Spanish", "photo": "es.png", "shortcut": "es" }, { "id": 3, "

我有问题为什么RecyclerView不显示项目我不知道为什么不显示项目

json url

[
  {
    "id": 1,
    "title": "English",
    "photo": "en.png",
    "shortcut": "en"
  },
  {
    "id": 2,
    "title": "Spanish",
    "photo": "es.png",
    "shortcut": "es"
  },
  {
    "id": 3,
    "title": "Arabic",
    "photo": "ar.png",
    "shortcut": "ar"
  },
  {
    "id": 4,
    "title": "Russian",
    "photo": "ru.png",
    "shortcut": "ru"
  },
  {
    "id": 5,
    "title": "Portuguese",
    "photo": "pt.png",
    "shortcut": "pt"
  },
  {
    "id": 6,
    "title": "French",
    "photo": "fr.png",
    "shortcut": "fr"
  },
  {
    "id": 7,
    "title": "Turkish",
    "photo": "tr.png",
    "shortcut": "tr"
  }
]
活动

public class CategoriesActivity extends AppCompatActivity {

    //mapping
    @BindView(R.id.rv_categories)
    RecyclerView rv_categories;

    CategoriesAdapter categoriesAdapter;
    List<CategoriesModel> categoriesModels = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_categories);
        ButterKnife.bind(CategoriesActivity.this);
        //set data
        setData();
    }

    private void setData() {
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("***Stackoverflow")
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        RetrofitService retrofitService = retrofit.create(RetrofitService.class);
        Call<List<CategoriesModel>> call = retrofitService.get_categories();
        call.enqueue(new Callback<List<CategoriesModel>>() {
            @Override
            public void onResponse(Call<List<CategoriesModel>> call, Response<List<CategoriesModel>> response) {
                List<CategoriesModel> list = response.body();
                for (CategoriesModel data : list) {
                    categoriesModels.add(new CategoriesModel(data.id, data.title, data.photo, data.shortcut));
                }
                rv_categories.setLayoutManager(new GridLayoutManager(CategoriesActivity.this, 2));
                categoriesAdapter = new CategoriesAdapter(CategoriesActivity.this, categoriesModels);
                rv_categories.setAdapter(categoriesAdapter);
            }
            @Override
            public void onFailure(Call<List<CategoriesModel>> call, Throwable t) {

            }
        });
    }

}
接口

public interface RetrofitService {

    //Categories
    @GET("Categories/get_categories.php")
    Call<List<CategoriesModel>> get_categories();

}
公共接口服务{
//类别
@GET(“Categories/GET_Categories.php”)
调用get_categories();
}
适配器

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

    Context context;
    List<CategoriesModel> categoriesModels;

    public CategoriesAdapter(Context context, List<CategoriesModel> categoriesModels) {
        this.context = context;
        this.categoriesModels = categoriesModels;
    }

    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.row_categories, viewGroup, false);
        ViewHolder adapterHolder = new ViewHolder(view);
        return adapterHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
        CategoriesModel categoriesModel = categoriesModels.get(i);
        //set photo
        Picasso.get().load(viewHolder.url + categoriesModel.photo).into(viewHolder.img_background);
    }

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

    public class ViewHolder extends RecyclerView.ViewHolder {

        //mapping
        @BindView(R.id.img_background)
        ImageView img_background;
        @BindString(R.string.categories)
        String url;

        public ViewHolder(View view) {
            super(view);
            ButterKnife.bind(context, view);
        }

    }

}
公共类CategoriesAdapter扩展了RecyclerView.Adapter{
语境;
列出分类模型;
公共类别适配器(上下文、列表类别模型){
this.context=上下文;
this.categoriesModels=categoriesModels;
}
@凌驾
public ViewHolder onCreateViewHolder(@NonNull ViewGroup ViewGroup,int i){
View View=LayoutInflater.from(viewGroup.getContext()).flate(R.layout.row_类别,viewGroup,false);
ViewHolder adapterHolder=新的ViewHolder(视图);
返回适配器文件夹;
}
@凌驾
public void onBindViewHolder(@NonNull ViewHolder ViewHolder,int i){
CategoriesModel CategoriesModel=categoriesModels.get(i);
//定影
Picasso.get().load(viewHolder.url+categoriesModel.photo).into(viewHolder.img_background);
}
@凌驾
public int getItemCount(){
返回categoriesModels.size();
}
公共类ViewHolder扩展了RecyclerView.ViewHolder{
//映射
@BindView(R.id.img_背景)
图像视图img_背景;
@BindString(R.string.categories)
字符串url;
公共视图持有者(视图){
超级(视图);
绑定(上下文、视图);
}
}
}
行类别

<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/img_background"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="5dp">

</ImageView>

activity_categories.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".CategoriesActivity">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/rv_categories"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</RelativeLayout>


从昨天开始,我试图找出问题所在,但没有找到问题,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,我希望能帮助我,非常感谢你,你可以避免这段代码

for (CategoriesModel data : list) {
      categoriesModels.add(new CategoriesModel(data.id, data.title, data.photo, data.shortcut));
}
并执行类似于
categoriesModels.addAll(list)的操作

在您的
ViewHolder中
不需要此选项

@BindString(R.string.categories)
String url;
因为您的
R.layout.row\u类别
只包含一个
ImageView

尝试将您的
行\u categories.xml
更改为以下内容:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="50dp"
    android:layout_height="50dp">

    <ImageView
    android:id="@+id/img_background"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="5dp">

</ImageView>

</LinearLayout>
如果不起作用,请尝试将您的
onCreate()
更改为以下内容:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_categories);
    ButterKnife.bind(CategoriesActivity.this);
    rv_categories.setHasFixedSize(true);
    rv_categories.setLayoutManager(new GridLayoutManager(CategoriesActivity.this, 2));
    setData();
}
编辑 我认为问题就在这里

public class CategoriesModel {

    @SerializedName("id")
    public String id;
    @SerializedName("title")
    public String title;
    @SerializedName("photo")
    public String photo;
    @SerializedName("shortcut")
    public String shortcut;

    public CategoriesModel(String id, String title, String photo, String shortcut) {
        this.id = id;
        this.title = title;
        this.photo = photo;
        this.shortcut = shortcut;
    }
}
问题就在这里

Picasso.get().load(viewHolder.url + categoriesModel.photo).into(viewHolder.img_background);
你必须把它改成

Picasso.get().load(URL_BASE+"Forvo/Categories/Images/" + categoriesModel.getPhoto()).into(viewHolder.img_background);
您必须为所有这些属性添加
Setter
Getter


我建议您在解析POJO类时使用。请确保预定义图像视图大小。因为加载的图像大小与它相当,除非您声明其他内容

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
   android:layout_width="50dp"
   android:layout_height="50dp">

   <ImageView
      android:id="@+id/img_background"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:layout_margin="5dp">
</ImageView>


然后从谷歌或其他网站上选择一个图像url,该url只在您点击链接时显示图像,以确定您的url参数是否错误。

您好,欢迎来到StackOverflow!您从服务器得到什么响应?是否确定已成功获取数据?List=response.body();我想问题就在这里。伙计们,我可以通过Toast打印数据,但不显示在列表中:(RecyclerView在屏幕上有空间吗?添加背景色并在屏幕上查看。)layout@MarcosVasconcelos我有ImageView我编辑了我的帖子我尝试在onBindViewHolder中打印Toast,但没有任何消息您是否尝试打印例如categoriesModel.getSomething()?你想让我给你url JSON以便在你的计算机中进行检查吗?不,按照我的步骤进行操作,它会工作的,按照编辑的步骤进行操作如果它不工作,我会尝试自己进行操作。它正在工作。非常感谢你:D,谢谢你的时间。最好的答案
Picasso.get().load(URL_BASE+"Forvo/Categories/Images/" + categoriesModel.getPhoto()).into(viewHolder.img_background);
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
   android:layout_width="50dp"
   android:layout_height="50dp">

   <ImageView
      android:id="@+id/img_background"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:layout_margin="5dp">
</ImageView>