Я делаю приложение, используя API данных YouTube, и я застрял в проблеме и не могу найти решение, поэтому любая помощь будет оценена по достоинству.
ниже мой код, который я много пробовал, но не нашел решения, и я новичок в этом, поэтому, пожалуйста, помогите мне в этом, в методе onResponse работает всплывающее сообщение, что означает, что код получает ответ, но эти данные не отображаются в представлении ресайклера
public class MainActivity extends AppCompatActivity {
RecyclerView list;
LinearLayoutManager linearLayoutManager;
ArrayList<VideosList> videosLists;
CustomRecyclerAdapter listViewAdapter;
String url = "https://www.googleapis.com/youtube/v3/search?part=snippet&channelId=myId&maxResults=3&key=myApiKey";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
list = findViewById(R.id.rv);
videosLists = new ArrayList<>();
linearLayoutManager = new LinearLayoutManager(this);
RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);
StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Toast.makeText(MainActivity.this,"Success",Toast.LENGTH_LONG).show();
try {
JSONObject jsonObject = new JSONObject(response);
JSONArray jsonArray = jsonObject.getJSONArray("items");
for (int i = 0; i < jsonArray.length(); i++ ) {
JSONObject jsonObject1 = jsonArray.getJSONObject(i);
JSONObject jsonObjectVideoId = jsonObject1.getJSONObject("id");
JSONObject jsonObjectSnippet = jsonObject1.getJSONObject("snippet");
JSONObject jsonObjectthumb = jsonObject1.getJSONObject("thumbnails").getJSONObject("medium");
String videoId = jsonObjectVideoId.getString("videoId");
String thumb = jsonObjectthumb.getString("url");
VideosList videosList = new VideosList();
videosList.setVideoId(videoId);
videosList.setTitle(jsonObjectSnippet.getString("title"));
videosList.setThumbnail(thumb);
videosLists.add(videosList);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(MainActivity.this,"failed",Toast.LENGTH_LONG).show();
}
});
requestQueue.add(stringRequest);
list.setHasFixedSize(true);
list.setLayoutManager(linearLayoutManager);
listViewAdapter = new CustomRecyclerAdapter(this, videosLists);
list.setAdapter(listViewAdapter);
}
}
Ниже приведен макет для приведенного выше кода.
<?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 = "wrap_content"
tools:context = "com.creativeapps.entertainmentkidsyouth.MainActivity">
<android.support.v7.widget.RecyclerView
android:id = "@+id/rv"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
/>
</RelativeLayout>
Ниже приведен код адаптера
public class CustomRecyclerAdapter extends RecyclerView.Adapter<CustomRecyclerAdapter.ViewHolder> {
private ArrayList<VideosList> videosList;
private Context context;
public CustomRecyclerAdapter(Context context,ArrayList<VideosList> videoList) {
this.videosList = videoList;
this.context = context;
}
@Override
public CustomRecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview, parent, false);
ViewHolder viewHolder = new ViewHolder(v);
return viewHolder;
}
@Override
public void onBindViewHolder(final CustomRecyclerAdapter.ViewHolder holder, int position) {
holder.name.setText(videosList.get(position).getTitle());
Picasso.get().load(videosList.get(position).getThumbnail()).into(holder.imageView);
}
@Override
public int getItemCount() {
return videosList != null ?videosList.size():0;
}
public class ViewHolder extends RecyclerView.ViewHolder{
public TextView name;
ImageView imageView;
private ViewHolder(View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.thumbnail);
name = itemView.findViewById(R.id.title);
}
}
}
Ниже приведен класс для видеолиста
public class VideosList {
public String thumbnail, videoId, title;
public VideosList(String thumbnail, String videoId, String title) {
this.thumbnail = thumbnail;
this.videoId = videoId;
this.title = title;
}
public VideosList() {
}
public String getThumbnail() {
return thumbnail;
}
public void setThumbnail(String thumbnail) {
this.thumbnail = thumbnail;
}
public String getVideoId() {
return videoId;
}
public void setVideoId(String videoId) {
this.videoId = videoId;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
макет для пользовательского вида ресайклера
<?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"
android:background = "#fff"
android:layout_width = "match_parent"
android:layout_height = "wrap_content">
<LinearLayout
android:id = "@+id/root"
android:orientation = "horizontal"
android:gravity = "center"
android:padding = "10dp"
android:layout_width = "match_parent"
android:layout_height = "wrap_content">
<ImageView
android:id = "@+id/thumbnail"
android:src = "@mipmap/ic_launcher"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content" />
<TextView
android:textSize = "16sp"
android:layout_marginStart = "10dp"
android:padding = "10dp"
android:textColor = "#111"
android:id = "@+id/title"
android:text = "Video"
android:layout_width = "match_parent"
android:layout_height = "wrap_content" />
</LinearLayout>
</RelativeLayout>
спасибо за комментарий, но он не работает
вы неправильно анализируете JSON из API
Заменять
JSONObject jsonObjectthumb = jsonObject1.getJSONObject("thumbnails").getJSONObject("medium");
с участием
JSONObject jsonObjectthumb = jsonObject1.getJSONObject("snippet").getJSONObject("thumbnails").getJSONObject("medium");
«миниатюры» находятся внутри «фрагмента» JSONObject
Замените эту строку
JSONObject jsonObjectthumb = jsonObject1.getJSONObject("thumbnails").getJSONObject("medium");
С участием
JSONObject jsonObjectthumb = jsonObjectSnippet.getJSONObject("thumbnails").getJSONObject("medium");
Объект «миниатюры» находится внутри объекта «фрагмент».
спасибо за ваш ответ, он работает, но я поставил галочку на первый ответ, так как это был первый ответ
Вам нужно установить адаптер внутри метода
onResponse()