[英]i am trying to retrieve the data from fire base database using recycler view but i am getting errors in it
[英]I am facing a problem which setting the data in recycler view I have tested that data is coming from the API
誰能告訴我錯誤在哪里? 我嘗試了所有可能的事情,但它不起作用。
如果我只傳遞一個標題數組,那么它顯示得很好; 但是,當我通過ArrayList
的電影時,它由Model
class 的對象組成,然后它不起作用。
這是主要活動的代碼:
package com.example.moviesinfo;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.android.volley.Request;
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 com.example.moviesinfo.API.API;
import com.example.moviesinfo.Model.MovieDetails;
import com.example.moviesinfo.Model.MovieModel;
import org.json.JSONArray;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.LinkedList;
public class MainActivity extends AppCompatActivity {
//Customised adapter for showing movies in recycle view
CustomAdapterMain adapter;
//Recycle view for movies
RecyclerView recyclerView;
//arrayLists for title
ArrayList<String> titleList;
//List for sort title for API
ArrayList<String> sortTitle;
//Title
String title="";
//Movies Model
ArrayList<MovieModel> movies;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Setting toolbar
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
//Arraylists
titleList=new ArrayList<>();
sortTitle=new ArrayList<>();
movies=new ArrayList<>();
//Getting reference and Setting layout manager for recycler view
recyclerView = findViewById(R.id.recycler_view);
recyclerView.setHasFixedSize(true);
LinearLayoutManager manager = new LinearLayoutManager(this,
LinearLayoutManager.VERTICAL, false);
manager.setSmoothScrollbarEnabled(true);
recyclerView.setNestedScrollingEnabled(false);
recyclerView.setLayoutManager(manager);
//Adding Titles
titleList.add("Top Rated");
sortTitle.add("top_rated");
titleList.add("Popular");
sortTitle.add("popular");
titleList.add("Now Playing");
sortTitle.add("now_playing");
titleList.add("Upcoming");
sortTitle.add("upcoming");
//Fetchin json data
fetchData();
//Setting Adapter
setAdapter();
}
private void setAdapter() {
adapter=new CustomAdapterMain(MainActivity.this,movies);
recyclerView.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
public void fetchData() {
// For URL's
API api = new API();
for (int i = 0; i < sortTitle.size(); i++) {
String url = api.getMovieUrl() + sortTitle.get(i) + api.getApiKey();
title = titleList.get(i);
StringRequest request = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
MovieModel model=new MovieModel();
model.setTitle(title);
//getting the whole JSON object from the response
JSONObject objectRespone = new JSONObject(response);
//we have the array named hero inside the object
//so here we are getting that json array
JSONArray array = objectRespone.getJSONArray("results");
ArrayList<MovieDetails> moviesDetails=new ArrayList<>();
for (int i = 0; i < array.length(); i++) {
JSONObject obj = array.getJSONObject(i);
MovieDetails movie = new MovieDetails();
movie.setTitle(obj.getString("title"));
movie.setPoster_path(obj.getString("poster_path"));
movie.setVote_average(obj.getString("vote_average"));
movie.setOverview(obj.getString("overview"));
movie.setRelease_date(obj.getString("release_date"));
moviesDetails.add(movie);
}
model.setArrayList(moviesDetails);
movies.add(model);
} catch (Exception e) {
Toast.makeText(MainActivity.this, "Exception: " + e, Toast.LENGTH_LONG).show();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(MainActivity.this, "Error: " + error.getMessage(), Toast.LENGTH_LONG).show();
}
});
//creating a request queue
RequestQueue requestQueue = Volley.newRequestQueue(this);
//adding the string request to request queue
requestQueue.add(request);
}
}
}
您的數據存儲在列表視圖中,但您沒有通知您的recyclerview
數據已存儲。
所以像這樣修改你的代碼,它會起作用。
model.setArrayList(moviesDetails);
movies.add(model);
// Add this line
adapter.notifyDataSetChanged();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.