简体   繁体   English

为什么我的 RecyclerView 不显示任何内容?

[英]Why my RecyclerView doesnt show anything?

I have a big issue.我有一个大问题。 My RecyclerView doesnt work and I don´t know how to solve my problem.我的RecyclerView不起作用,我不知道如何解决我的问题。 In my Logcat it seems that the Fragment doesn't call onResponse and only call the ErrorResponse .在我的 Logcat 中,似乎 Fragment 没有调用onResponse而只调用ErrorResponse
I tried everything but nothing helped at all.我尝试了一切,但没有任何帮助。
Don't know which part is wrong and why it doesnt work.不知道哪个部分是错误的,为什么它不起作用。

My Home Fragment:我的家庭片段:

public class Home_Fragment extends Fragment {
private String URL= "http://localhost/pages/index.php";
private RecyclerAdapter recyclerAdapter;
private RecyclerView recyclerView;
private ArrayList<Data> listdata;
private static final String TAG = "Home_Fragment";


private GridLayoutManager gridLayoutManager;

// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
public Home_Fragment() {
    // Required empty public constructor
}
private void AmbilData() {
    JsonArrayRequest aarRequest = new JsonArrayRequest(URL,
            new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray response) {
            if (response.length()>0){
                for (int i =0 ; i<response.length();i++){
                    try {
                        JSONObject data = response.getJSONObject(i);
                        Data item = new Data();
                        item.setEventname(data.getString("Eventname"));
                        item.setEventhost(data.getString("Eventclub"));
                        item.setEventclub(data.getString("Eventhost"));
                        item.setGenre(data.getString("Genre"));
                        item.setDate(data.getString("Date"));
                        item.setAdress(data.getString("Adress"));
                        item.setTime(data.getString("Time"));
                        item.setPrice(data.getString("Price"));


                    } catch (JSONException e) {
                    }
                }
                recyclerAdapter.addData(listdata);
            }
        }
        },
            new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
                                }
                            }){

                    };
                    Volley.newRequestQueue(getActivity()).add(aarRequest);
                }

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    Log.d(TAG, "onCreateView: createview");

    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_home_, container, false);

    AmbilData();
    recyclerView = view.findViewById(R.id.recyclerview);
    recyclerView.setHasFixedSize(true);
    gridLayoutManager = new GridLayoutManager(getActivity(), 2);
    gridLayoutManager.setOrientation(GridLayoutManager.VERTICAL);
    recyclerView.setLayoutManager(gridLayoutManager);
    listdata = new ArrayList<Data>();
    recyclerAdapter = new RecyclerAdapter(getActivity(),listdata);
    recyclerView.setAdapter(recyclerAdapter);
    recyclerAdapter.notifyDataSetChanged();
    Log.d(TAG, "onCreateView: viewreturned");

    return view;
}
}

My RecyclerAdapter我的 RecyclerAdapter

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {
    private ArrayList<Data> listdata;
    private Activity activity;
    private Context context;
    private static final String TAG = "Recycler";

public RecyclerAdapter(Activity activity, ArrayList<Data> listdata) {
    this.listdata = listdata;
    this.activity = activity;
}

@Override
public RecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    Log.d(TAG, "onCreateViewHolder: create Holder");
    View v = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.event_cardview, parent, false);
    ViewHolder vh = new ViewHolder(v);
    return vh;
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    Log.d(TAG, "onBindViewHolder: Create holder Items");
    //holder.mImage.setImageResource(listdata.get(position).getThubnail());
    holder.eventname.setText(listdata.get(position).getEventname());
    holder.eventclub.setText(listdata.get(position).getEventclub());
    holder.eventhost.setText(listdata.get(position).getEventhost());
    holder.genre.setText(listdata.get(position).getGenre());
    holder.date.setText(listdata.get(position).getDate());
    holder.adress.setText(listdata.get(position).getAdress());
    holder.time.setText(listdata.get(position).getTime());
    holder.price.setText(listdata.get(position).getPrice());


}
public void addData(List<Data> data) {
    listdata.addAll(data);
    notifyDataSetChanged();
}
@Override
public int getItemCount() {
    Log.d(TAG, "getItemCount: return size");
    return listdata.size();
}

public static class ViewHolder extends RecyclerView.ViewHolder {
    private CardView cv;
    private TextView eventname,eventclub,eventhost,genre,date,adress,time,price;
    private static final String TAG = "Class";


    public ViewHolder(View v) {
        super(v);
        Log.d(TAG, "ViewHolder: created");
        cv=(CardView)v.findViewById(R.id.eventcardview);
        eventname=(TextView)v.findViewById(R.id.EventName);
        eventclub=(TextView)v.findViewById(R.id.EventClub);
        eventhost=(TextView)v.findViewById(R.id.EventHost);
        genre=(TextView)v.findViewById(R.id.Genre);
        date=(TextView)v.findViewById(R.id.dark);
        adress=(TextView)v.findViewById(R.id.location_adress);
        time=(TextView)v.findViewById(R.id.Time);
        price=(TextView)v.findViewById(R.id.Price);

    }
}

}

My Data我的资料

public class Data {
    private String eventname;
    private String eventclub;
    private String eventhost;
    private String genre;
    private String date;
    private String adress;
    private String time;
    private String price;

public String getEventname() {
    return eventname;
}
public void setEventname(String eventname) {
    this.eventname = eventname;
}

public String getEventclub() {
    return eventclub;
}
public void setEventclub(String eventlcub) {
    this.eventclub = eventclub;
}

public String getEventhost() {
    return eventhost;
}
public void setEventhost(String eventhost) {
    this.eventhost = eventhost;
}

public String getGenre() {
    return genre;
}
public void setGenre(String genre) {
    this.genre = genre;
}

public String getDate() {
    return date;
}
public void setDate(String date) {
    this.date = date;
}

public String getAdress() {
    return adress;
}

public void setAdress(String adress) {
    this.adress = adress;
}

public String getTime() {
    return time;
}
public void setTime(String time) {
    this.time = time;
}

public String getPrice() {
    return price;
}
public void setPrice(String price) {
    this.price = price;
}

}

When I open localhost/pages/index.php on my Computer it shows this:当我在我的电脑上打开 localhost/pages/index.php 时,它显示:

 {"ID":1,"Eventname":"Imagine-Event","Eventclub":"Imagine-Club","Eventhost":"Imagine-Host","Genre":"Techno","Date":"2020-12-31","Time":"22:00-06:00","Adress":"Frankfurt Gutleutstra\u00dfe 126a","Price":15}
{"ID":2,"Eventname":"Hello-Event","Eventclub":"Hello-Club","Eventhost":"Hello-Host","Genre":"Hello","Date":"2021-01-01","Time":"21:00-6:00","Adress":"Frankfurt am Main Sachsenhausengasse 128a","Price":5}
{"ID":3,"Eventname":"Fantasy-Event","Eventclub":"Fantasy-Club","Eventhost":"Fantasy-Host","Genre":"Mainstream","Date":"2021-02-19","Time":"00:00-12:00","Adress":"Langen (Hessen) Sehretstra\u00dfe 33a","Price":5}
{"ID":4,"Eventname":"This Event","Eventclub":"This-Club","Eventhost":"This Host","Genre":"Hip-Hop","Date":"2021-03-03","Time":"20:00-2:00","Adress":"Frankfurt am Main Goethestra\u00dfe","Price":15}

When I start it dont show the Recyclerview what is the problem tried to solve it for 10 hours now.当我开始时,它不显示 Recyclerview 是什么问题试图解决它现在 10 小时。

You are adding empty data to the RecyclerView adapter when you call recyclerAdapter.addData(listdata) in AmbilData() method because you iterate over the JSON list and didn't add items to listdata list of data.当您在AmbilData()方法中调用recyclerAdapter.addData(listdata)时,您正在向RecyclerView适配器添加空数据,因为您遍历JSON列表并且没有向数据的listdata列表添加项目。

To solve this, use listdata.add(item) within the loop.要解决此问题,请在循环中使用listdata.add(item)

private void AmbilData() {
    JsonArrayRequest aarRequest = new JsonArrayRequest(URL,
            new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray response) {
            if (response.length()>0){
                for (int i =0 ; i<response.length();i++){
                    try {
                        JSONObject data = response.getJSONObject(i);
                        Data item = new Data();
                        item.setEventname(data.getString("Eventname"));
                        item.setEventhost(data.getString("Eventclub"));
                        item.setEventclub(data.getString("Eventhost"));
                        item.setGenre(data.getString("Genre"));
                        item.setDate(data.getString("Date"));
                        item.setAdress(data.getString("Adress"));
                        item.setTime(data.getString("Time"));
                        item.setPrice(data.getString("Price"));
                        listdata.add(item); // <<<<<< Here is the Change

                    } catch (JSONException e) {
                    }
                }
                recyclerAdapter.addData(listdata);
            }
...

Also as @Gabe Sechan pointed out in comments, you have to check the URL同样正如@Gabe Sechan 在评论中指出的那样,您必须检查URL

I solved my problem.我解决了我的问题。 I got at the getItemcount method the size null cause my PHP-code was wrong.我在 getItemcount 方法中得到了 null 大小,因为我的 PHP 代码是错误的。 I didnt throw out the right variables.我没有抛出正确的变量。

My Code: `我的代码:`

?php foreach ($events AS $event):
         $ID=json_encode($events);
         print($ID);
endforeach; ?>

Before I used $event now im using $events as param.在我使用 $event 之前,我现在使用 $events 作为参数。

` `

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM