Java 截击-如何从截击中的OnResponse方法返回ArrayList

Java 截击-如何从截击中的OnResponse方法返回ArrayList,java,android,arraylist,android-volley,Java,Android,Arraylist,Android Volley,我使用截取来解析RESTAPI中的电影细节,并将解析后的数据保存在名为detailsMovies的Arraylist对象中。但是我无法访问onResponse方法之外的ArrayList。我是Android新手,所以我不知道该怎么做。 感谢您的帮助 代码如下:` public class MovieDetailsActivity extends AppCompatActivity { TextView movieIdText; private VolleySingleto

我使用截取来解析RESTAPI中的电影细节,并将解析后的数据保存在名为detailsMovies的Arraylist对象中。但是我无法访问onResponse方法之外的ArrayList。我是Android新手,所以我不知道该怎么做。 感谢您的帮助

代码如下:`

    public class MovieDetailsActivity extends AppCompatActivity {
    TextView movieIdText;
    private VolleySingleton volleySingleton;
    private RequestQueue mRequestQueue;
    private ArrayList<MovieDetails> 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<JSONObject>() {
            @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;
    }
公共类MovieDetailsActivity扩展了AppCompativeActivity{
TextView电影文本;
单打单打单打单打单打单打;
私有请求队列mRequestQueue;
私有ArrayList detailsMovies=新ArrayList();
//私人弦乐电影;
//私人字符串电影摘要;
//私人电影年;
//私人长期电影;
//私有字符串movieYoutubeId;
//私人字符串电影;
//私有字符串电影下载链接720p;
//私人字符串电影质量720p;
//私有字符串moviefileSize720p;
//私有字符串电影下载链接1080p;
//私人字符串电影质量1080p;
//私有字符串电影文件大小1080p;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u movie\u details);
Intent i=getIntent();
String movieId=i.getExtras().getString(“movieId”);
volleySingleton=volleySingleton.getsInstance();
mRequestQueue=VolleySingleton.getmRequestQueue();
parseMovieDetails();
}
公共电影详细信息(){
JsonObjectRequest JsonObjectRequest=新的JsonObjectRequest(Request.Method.GET,getUrl(100),new Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
MovieDetails MovieDetails=新的MovieDetails();
if(response==null | | response.length()==0){
Toast.makeText(getApplicationContext(),“Null对象”,Toast.LENGTH_LONG.show();
}
试一试{
JSONObject movieData=response.getJSONObject(“数据”);
JSONObject movieDetailsObject=movieData.getJSONObject(Keys.EndPointMovieDetails.Keys\u MOVIE);
String movieTitle=movieDetailsObject.getString(Keys.EndPointMovieDetails.Keys\u TITLE\u LONG);
long movieRating=movieDetailsObject.getInt(key.EndPointMovieDetails.Keys\u RATING);
String movieSynopsis=movieDetailsObject.getString(key.EndPointMovieDetails.Keys\u DESCRIPTION);
String moviePosterUrl=movieDetailsObject.getString(key.EndPointMovieDetails.Keys\u COVER);
String movieYoutubeId=movieDetailsObject.getString(KEY.EndPointMovieDetails.KEY\u YOUTUBE\u ID);
电影详情。片名(电影字幕);
电影细节。设置(电影化);
电影详情.集摘要(电影综合);
setUrlThumbnail(moviePosterUrl);
movieDetails.setYoutube_id(movieYoutubeId);
detailsMovies.add(电影详情);
JSONArray torrentDownloadLinks=movieDetailsObject.getJSONArray(key.EndPointMovieDetails.Keys_TORRENTS);

对于(inti=0;i在类中定义一个接口并实现它。
所以这里的简单技巧就是回调接口

public class MovieDetailsActivity extends AppCompatActivity { 
TextView movieIdText;
private VolleySingleton volleySingleton;
private RequestQueue mRequestQueue;
private ArrayList<MovieDetails> 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<MovieDetails> 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<JSONObject>() {
        @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);
                } 
               onCallBack.success(detailsMovies);


            } catch (JSONException e) {

                e.printStackTrace();
                onCallBack.onFail(e.toString());
            } 


        } 

    }, 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 interface CallBack {
    void onSuccess(ArrayList<MovieDetails> detailsMovies);

    void onFail(String msg);
}
公共类MovieDetailsActivity扩展了AppCompatActivity{
TextView电影文本;
单打单打单打单打单打单打;
私有请求队列mRequestQueue;
私有ArrayList detailsMovies=新ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u movie\u details);
Intent i=getIntent();
String movieId=i.getExtras().getString(“movieId”);
volleySingleton=volleySingleton.getsInstance();
mRequestQueue=VolleySingleton.getmRequestQueue();
parseMovieDetails(新回调(){
@凌驾
成功时的公共无效(ArrayList detailsMovies){
//做事
}
@凌驾
公共void onFail(字符串msg){
//做事
}
}); 
} 
public void parseMovieDetails(最终回调onCallBack){
JsonObjectRequest JsonObjectRequest=新的JsonObjectRequest(Request.Method.GET,getUrl(100),new Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
MovieDetails MovieDetails=新的MovieDetails();
if(response==null | | response.length()==0){
Toast.makeText(getApplicationContext(),“Null对象”,Toast.LENGTH_LONG.show();
} 
试试{
JSONObject movieData=response.getJSONObject(“数据”);
JSONObject movieDetailsObject=movieData.getJSONObject(Keys.EndPointMovieDetails.Keys\u MOVIE);
String movieTitle=movieDetailsObject.getString(Keys.EndPointMovieDetails.Keys\u TITLE\u LONG);
long movieRating=movieDetailsObject.getInt(key.EndPointMovieDetails.Keys\u RATING);
String movieSynopsis=movieDetailsObject.getString(key.EndPointMovieDetails.Keys\u DESCRIPTION);
String moviePosterUrl=movieDetailsObject.getString(key.EndPointMovieDetails.Keys\u COVER);
String movieYoutubeId=movieDetailsObject.getString(KEY.EndPointMovieDetails.KEY\u YOUTUBE\u ID);
电影详情。片名(电影字幕);
电影细节。设置(电影化);
电影详情.集摘要(电影综合);
setUrlThumbnail(moviePosterUrl);
movieDetails.setYoutube_id(movieYoutubeId);
detailsMovies.add(电影详情);
JSONArray torrentDownloadLinks=movieDetailsObject.getJSONArray(key.EndPointMovieDetails.Keys_TORRENTS);

对于(int i=0;i您可以轻松访问,为什么您不能访问