java – volley-如何从Volley中的OnResponse方法返回ArrayList
发布时间:2020-12-15 04:32:30 所属栏目:Java 来源:网络整理
导读:我正在使用volley来解析REST api中的Movie Details,我将解析后的Data保存在名为detailsMovies的对象的Arraylist中.但我无法访问onResponse方法之外的ArrayList.我是 Android新手所以我不知道该怎么做. 任何帮助表示赞赏! 这是代码:` public class MovieDet
我正在使用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<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; } 解决方法
在您的类中定义一个接口并实现它.
这里简单的技巧是与回调的接口. 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,new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { MovieDetails movieDetails = new MovieDetails(); if (response == null || response.length() == 0) { Toast.makeText(getApplicationContext(),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); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |