有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我面临一个问题,即在recycler视图中设置数据,我已经测试过数据来自API

谁能告诉我哪里出了错吗?我尝试了所有可能的方法,但都不管用

如果我只通过了一系列标题,那么它就表现得很好;但是,当我通过由Model类对象组成的ArrayList电影时。,那就不行了

以下是主要活动的代码:

package com.example.moviesinfo;

import 安卓.app.ProgressDialog;
import 安卓.os.Bundle;
import 安卓.view.View;
import 安卓.widget.Toast;

import 安卓x.appcompat.app.AppCompatActivity;
import 安卓x.appcompat.widget.Toolbar;
import 安卓x.recyclerview.widget.LinearLayoutManager;
import 安卓x.recyclerview.widget.RecyclerView;

import com.安卓.volley.Request;
import com.安卓.volley.RequestQueue;
import com.安卓.volley.Response;
import com.安卓.volley.VolleyError;
import com.安卓.volley.toolbox.StringRequest;
import com.安卓.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);
        }
    }
}

共 (1) 个答案

  1. # 1 楼答案

    您的数据存储在列表视图中,但您没有通知recyclerview数据已存储

    所以像这样修改你的代码,它就会工作

        model.setArrayList(moviesDetails);
        movies.add(model);
        // Add this line
        adapter.notifyDataSetChanged();