volley-如何从Volley中的OnResponse方法返回ArrayList

我正在使用volley来解析REST api中的Movie Details,我将解析后的Data保存在名为detailsMovies的对象的Arraylist中。 但我无法访问onResponse方法之外的ArrayList。 我是Android新手所以我不知道该怎么做。 任何帮助表示赞赏!

这是代码:`

public class MovieDetailsActivity extends AppCompatActivity { TextView movieIdText; private VolleySingleton volleySingleton; private RequestQueue mRequestQueue; private ArrayList detailsMovies = new ArrayList(); // private String movieTitle ; // private String movieSummary ; // private int movieYear; // private long movieRating; // private String movieYoutubeId; // private String movieUrlThumbnail; // private String movieDownloadLink720p; // private String movieQuality720p; // private String moviefileSize720p; // private String movieDownloadLink1080p; // private String movieQuality1080p; // private String moviefileSize1080p; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_movie_details); Intent i = getIntent(); String movieId = i.getExtras().getString("movieId"); volleySingleton = VolleySingleton.getsInstance(); mRequestQueue = VolleySingleton.getmRequestQueue(); parseMovieDetails(); } public void parseMovieDetails(){ JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, getUrl(100), new Response.Listener() { @Override public void onResponse(JSONObject response) { MovieDetails movieDetails = new MovieDetails(); if (response == null || response.length() == 0) { Toast.makeText(getApplicationContext(), "Null Object", Toast.LENGTH_LONG).show(); } try { JSONObject movieData = response.getJSONObject("data"); JSONObject movieDetailsObject = movieData.getJSONObject(Keys.EndPointMovieDetails.KEYS_MOVIE); String movieTitle = movieDetailsObject.getString(Keys.EndPointMovieDetails.KEYS_TITLE_LONG); long movieRating = movieDetailsObject.getInt(Keys.EndPointMovieDetails.KEYS_RATING); String movieSynopsis = movieDetailsObject.getString(Keys.EndPointMovieDetails.KEYS_DESCRIPTION); String moviePosterUrl = movieDetailsObject.getString(Keys.EndPointMovieDetails.KEYS_COVER); String movieYoutubeId = movieDetailsObject.getString(Keys.EndPointMovieDetails.KEY_YOUTUBE_ID); movieDetails.setTitle(movieTitle); movieDetails.setRating(movieRating); movieDetails.setSummary(movieSynopsis); movieDetails.setUrlThumbnail(moviePosterUrl); movieDetails.setYoutube_id(movieYoutubeId); detailsMovies.add(movieDetails); JSONArray torrentDownloadLinks = movieDetailsObject.getJSONArray(Keys.EndPointMovieDetails.KEYS_TORRENTS); for(int i=0;i<torrentDownloadLinks.length();i++) { JSONObject urlInfo = torrentDownloadLinks.getJSONObject(i); String urlTorrent = urlInfo.getString("url"); String quality = urlInfo.getString("quality"); String fileSize = urlInfo.getString("size"); movieDetails.setDownloadLink(urlTorrent); movieDetails.setQuality(quality); movieDetails.setFileSize(fileSize); detailsMovies.add(movieDetails); } } catch (JSONException e) { e.printStackTrace(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } }); mRequestQueue.add(jsonObjectRequest); } public String getUrl(int movieId){ return UrlEndPoints.URL_MOVIE_DETAILS+ UrlEndPoints.URl_CHAR_QUESTION+ UrlEndPoints.URL_PARAM_ID+movieId; } 

在您的类中定义一个接口并实现它。
这里简单的技巧是与回调的接口。

 public class MovieDetailsActivity extends AppCompatActivity { TextView movieIdText; private VolleySingleton volleySingleton; private RequestQueue mRequestQueue; private ArrayList detailsMovies = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_movie_details); Intent i = getIntent(); String movieId = i.getExtras().getString("movieId"); volleySingleton = VolleySingleton.getsInstance(); mRequestQueue = VolleySingleton.getmRequestQueue(); parseMovieDetails(new CallBack() { @Override public void onSuccess(ArrayList detailsMovies) { // Do Stuff } @Override public void onFail(String msg) { // Do Stuff } }); } public void parseMovieDetails(final CallBack onCallBack){ JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, getUrl(100), new Response.Listener() { @Override public void onResponse(JSONObject response) { MovieDetails movieDetails = new MovieDetails(); if (response == null || response.length() == 0) { Toast.makeText(getApplicationContext(), "Null Object", Toast.LENGTH_LONG).show(); } try { JSONObject movieData = response.getJSONObject("data"); JSONObject movieDetailsObject = movieData.getJSONObject(Keys.EndPointMovieDetails.KEYS_MOVIE); String movieTitle = movieDetailsObject.getString(Keys.EndPointMovieDetails.KEYS_TITLE_LONG); long movieRating = movieDetailsObject.getInt(Keys.EndPointMovieDetails.KEYS_RATING); String movieSynopsis = movieDetailsObject.getString(Keys.EndPointMovieDetails.KEYS_DESCRIPTION); String moviePosterUrl = movieDetailsObject.getString(Keys.EndPointMovieDetails.KEYS_COVER); String movieYoutubeId = movieDetailsObject.getString(Keys.EndPointMovieDetails.KEY_YOUTUBE_ID); movieDetails.setTitle(movieTitle); movieDetails.setRating(movieRating); movieDetails.setSummary(movieSynopsis); movieDetails.setUrlThumbnail(moviePosterUrl); movieDetails.setYoutube_id(movieYoutubeId); detailsMovies.add(movieDetails); JSONArray torrentDownloadLinks = movieDetailsObject.getJSONArray(Keys.EndPointMovieDetails.KEYS_TORRENTS); for(int i=0;i detailsMovies); void onFail(String msg); }