簡體   English   中英

我面臨在回收站視圖中設置數據的問題我已經測試過數據來自 API

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM