【问题标题】:Data parsed correctly from server but Android recyclerview is empty从服务器正确解析数据但 Android recyclerview 为空
【发布时间】:2020-10-30 13:37:44
【问题描述】:

我用 PHP 代码服务器制作了一个在线音乐播放器,我可以毫无问题地获取 JSON 格式的数据。我在 Android 端遇到问题,尽管我正确初始化了它,但我的 recyclerview 中没有显示任何数据。请帮我找出问题所在。

这是我的代码:

主活动:

public class MainActivity extends AppCompatActivity {
RecyclerView recyclerView;
RequestQueue requestQueue;
Context context;
ListAdapter adapter;
LinearLayoutManager layoutManager;
List<Listening> list = new ArrayList<>();
String url = "https://www.learnhere.ir/listening.php";
AccessDataOnServer data;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    context = this;
    recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
    requestQueue = Volley.newRequestQueue(context);
    layoutManager = new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false);
    adapter = new ListAdapter(list, context);
    data = new AccessDataOnServer();
    recyclerView.setAdapter(adapter);
    recyclerView.setLayoutManager(layoutManager);
    data.getData(context, list, recyclerView, url, requestQueue);
}
}

列表适配器:

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

List<Listening> listeningList;
Context context;

public ListAdapter(List<Listening> listeningList, Context context) {
    this.listeningList = listeningList;
    this.context = context;
}

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

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    final Listening listening = listeningList.get(position);
    holder.track.setText(listening.getTitle());
    holder.term.setText(listening.getTerm());
    Picasso.get().load(listening.getCover()).placeholder(R.mipmap.ic_launcher).into(holder.avatar);
}

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

public static class ViewHolder extends RecyclerView.ViewHolder {
    CardView cardView;
    ImageView avatar;
    TextView track, term;

    public ViewHolder(@NonNull View itemView) {
        super(itemView);
        cardView = itemView.findViewById(R.id.card_view);
        avatar = itemView.findViewById(R.id.avatar);
        track = itemView.findViewById(R.id.track_title);
        term = itemView.findViewById(R.id.term);
    }
}
}

借助 Volley Library 获取我的数据的类:

public class AccessDataOnServer extends AppCompatActivity {
RequestQueue req;
Context context;
ListAdapter adapter;
List<Listening> list1 = new ArrayList<>();
String url = "https://learnhere.ir/listening.php";

public void getData(final Context con, final List<Listening> list1, final RecyclerView recyclerView, String url, RequestQueue req
) {
    this.req = req;
    req = Volley.newRequestQueue(con);
    this.list1 = list1;
    JsonObjectRequest job = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {

            try {

                JSONArray jsonArray = response.getJSONArray("music");

                for (int i = 0; i < jsonArray.length(); i++) {

                    JSONObject job = jsonArray.getJSONObject(i);

                    String title = job.getString("title");
                    String cover = job.getString("cover");
                    String link = job.getString("track");
                    String term = job.getString("term");

                    Listening m = new Listening();
                    m.setTitle(title);
                    m.setTerm(term);
                    m.setCover(cover);
                    m.setTrackLink(link);
                    list1.add(m);

                }

                adapter = new ListAdapter(list1, con);
                recyclerView.setItemAnimator(new DefaultItemAnimator());
                recyclerView.setAdapter(adapter);


            } catch (Exception e) {
                Toast.makeText(con, "try error", Toast.LENGTH_SHORT).show();

            }

        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {

            Toast.makeText(con, "not response", Toast.LENGTH_SHORT).show();

        }
    });

    req.add(job);
}
}

我的数据模型:

public class Listening {

private String title;
private String term;
private String cover;
private String trackLink;

public String getTitle() {
    return title;
}

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

public String getTerm() {
    return term;
}

public void setTerm(String term) {
    this.term = term;
}

public String getCover() {
    return cover;
}

public void setCover(String cover) {
    this.cover = cover;
}

public String getTrackLink() {
    return trackLink;
}

public void setTrackLink(String trackLink) {
    this.trackLink = trackLink;
}
}

【问题讨论】:

    标签: java android mysql json server


    【解决方案1】:

    您的代码可以正常工作,并且没有问题。你在模拟器上测试过吗?尝试擦除模拟器上的数据或在物理设备上进行测试。你的问题应该已经解决了。

    【讨论】:

    • 哇,非常感谢。我的问题是模拟器我擦除了数据,它就像一个魅力
    猜你喜欢
    • 2017-11-18
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多