android-volley - 为什么我的recyclerview 只显示第一项的内容?

标签 android-volley android-recyclerview

我的 recyclerview 有问题,它只显示第一项的内容,如下所示:enter image description here

我不知道是什么原因造成的,我真的很困惑,因为我以前从未遇到过这样的事情。正如您在 toast 上看到的,响应返回了 3 个数据,但我不明白为什么没有显示其他数据。

播放列表.java

public class Playlist extends AppCompatActivity {

// inisiasi toolbar
private Toolbar toolbar;

// navigation drawer
public DrawerLayout drawerLayout;
private ActionBarDrawerToggle drawerToggle;

RecyclerView recyclerView;
String[] id,title,dir, artists;
ArrayList<String> artist;
String navTitles[];
TypedArray navIcons;
RecyclerView.Adapter recyclerViewAdapter;

TextView textView;
String video;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_playlist);

    toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    recyclerView  = (RecyclerView) findViewById(R.id.recyclerView);
    drawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    final Drawable upArrow = getResources().getDrawable(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
    upArrow.setColorFilter(getResources().getColor(R.color.colorIcons), PorterDuff.Mode.SRC_ATOP);
    getSupportActionBar().setHomeAsUpIndicator(upArrow);
    Intent intent = getIntent();
    video = intent.getStringExtra("songs");

    //textView = (TextView) findViewById(R.id.text);
    //textView.setText(video);

    getPlaylist();


    // dir = PlaylistJson.dirs;

    //artist = new ArrayList<String>(Arrays.asList(title));

}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()){
        case android.R.id.home:
            finish();
            break;
    }
    return super.onOptionsItemSelected(item);
}

private void getPlaylist(){

    final ProgressDialog loading = ProgressDialog.show(this,"Fetching Data","Please wait...",false,false);
    //Creating a string request
    StringRequest stringRequest = new StringRequest(Request.Method.POST, "http://musicmania.hol.es/playlist/getSongsFromPlaylist",
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    //If we are getting success from server
                    Toast.makeText(Playlist.this, response, Toast.LENGTH_LONG).show();

                    loading.dismiss();
                    showPlaylistJSON(response);

                    id = PlaylistJson.ids;
                    title = PlaylistJson.titles;
                    artists = PlaylistJson.artists;

                    recyclerView= (RecyclerView) findViewById(R.id.my_recycler_view);
                    RecyclerViewAdapter adapter=new RecyclerViewAdapter(id, title,artists, Playlist.this);
                    recyclerView.setAdapter(adapter);
                    adapter.notifyDataSetChanged();
                    recyclerView.setHasFixedSize(true);
                    recyclerView.setLayoutManager(new LinearLayoutManager(Playlist.this));
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    //You can handle error here if you want
                }
            }){
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            Map<String,String> params = new HashMap<>();
            //Adding parameters to request
            params.put("playlist", video);

            //returning parameter
            return params;
        }
    };

    //Adding the string request to the queue
    RequestQueue requestQueue = Volley.newRequestQueue(this);
    requestQueue.add(stringRequest);
}

private void showPlaylistJSON(String json){
    PlaylistJson pj = new PlaylistJson(json);
    pj.parseJSON();
    }
}

RecyclerViewAdapter.java

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.RecyclerViewHolder> {

LayoutInflater inflater;
Context context;

String[] id,title, artists;

public RecyclerViewAdapter(String[] id, String[] titles, String[] artists, Context context){
    this.id = id;
    this.title = titles;
    this.artists = artists;
    this.context = context;
}

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

    View view = null;
    RecyclerViewHolder viewHolder = null;

    if(Integer.parseInt(id[0]) != 0){
        view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list, parent, false);
        viewHolder = new RecyclerViewHolder(view, context);
    }else{
        view = LayoutInflater.from(parent.getContext()).inflate(R.layout.empty_list, parent, false);
        viewHolder = new RecyclerViewHolder(view, context);
    }
    return viewHolder;
}

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

    if(Integer.parseInt(id[0]) != 0) {
        holder.item2.setText(title[position]);
        holder.imageView2.setTag(holder);
        holder.artist.setText(artists[position]);
    }else{
        holder.item2.setText(title[position]);
    }

}

@Override
public int getItemCount() {

    return title.length;
}

public static class RecyclerViewHolder extends RecyclerView.ViewHolder {

    TextView item;
    ImageView imageView;
    TextView item2;
    TextView artist;
    ImageView imageView2;
    ImageButton addtoplaylist;
    Context context;

    public RecyclerViewHolder(final View itemView, final Context context) {
        super(itemView);

        this.context = context;
        item = (TextView) itemView.findViewById(R.id.tv_NavTitle);
        imageView = (ImageView) itemView.findViewById(R.id.iv_NavIcon);
        item2 = (TextView) itemView.findViewById(R.id.list_title);
        imageView2 = (ImageView) itemView.findViewById(R.id.list_avatar);
        artist = (TextView) itemView.findViewById(R.id.list_artist);

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

                Intent intent = new Intent(v.getContext(), Video.class);
                intent.putExtra("video", ParseJson.dirs[getAdapterPosition()]);
                v.getContext().startActivity(intent);
            }
        });


    }
}

}

播放列表Json.java

package com.example.rendell.musicmaniajukebox.json_model;

import android.widget.Toast;

import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class PlaylistJson {
public static String[] ids;
public static String[] titles;
public static String[] artists;
public static String[] dirs;

public static final String JSON_ARRAY = "result";
public static final String KEY_ID = "id";
public static final String KEY_TITLE = "title";
public static final String KEY_ARTIST = "artist";
public static final String KEY_DIR = "dir";

private JSONArray users = null;

private String json;

public PlaylistJson(String json){
    this.json = json;
}

public void parseJSON(){
    JSONObject jsonObject=null;
    try {
        jsonObject = new JSONObject(json);
        users = jsonObject.getJSONArray(JSON_ARRAY);

        ids = new String[users.length()];
        titles = new String[users.length()];
        artists = new String[users.length()];
        dirs = new String[users.length()];

        for(int i=0;i<users.length();i++){
            JSONObject jo = users.getJSONObject(i);
            ids[i] = jo.getString(KEY_ID);
            titles[i] = jo.getString(KEY_TITLE);
            artists[i] = jo.getString(KEY_ARTIST);
            dirs[i] = jo.getString(KEY_DIR);
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }
  }
}

最佳答案

所以问题出在我的 PlaylistJson.java 文件中。我的截击响应每组仅返回 3 个项目,例如{"id":1, "title": "song", "artist":"artist"} 但我也在为未收到任何 json 的目录初始化,所以可能是错误来自于此。无论如何,删除它并且它起作用了。

关于android-volley - 为什么我的recyclerview 只显示第一项的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35542418/

相关文章:

android - 在 recyclerview 中附加 onClickListener 的最佳位置

android - 无法实现卡片 View

Android - 将项目一一添加到 RecyclerView?

java - Android Volley 忽略参数无法连接

android - Android开发使用Volley时setRetryPolicy()方法调用应该写在哪里

android - Android 上的 Volley + OkHttp 在状态 200 响应上给出错误

c# - 有没有类似 Android RecyclerView for C# Winforms 的东西

android - 如何在不使用图像时使用截击下载图像并将其存储在缓存中

android - Recyclerview 内的重叠 View

android - RecyclerView 在 ScrollView 中时不显示所有项目