Java 截击-如何从截击中的OnResponse方法返回ArrayList
我使用截取来解析RESTAPI中的电影细节,并将解析后的数据保存在名为detailsMovies的Arraylist对象中。但是我无法访问onResponse方法之外的ArrayList。我是Android新手,所以我不知道该怎么做。 感谢您的帮助 代码如下:`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
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您可以轻松访问,为什么您不能访问