简体   繁体   中英

Why I am getting null value from list which is passed from another Activity?

In my project, I am calling themoviedb api and onResponse , i want to share the List to other Activity. When I am passing , I am getting null value from List in other Activity.

Here is my MainActivity.class file :-

Intent intent;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    intent = new Intent(this, SecondActivity.class);
    fetchMovieTrailers(5);
    startActivity(intent); 
}
public void fetchMovieTrailers(int id){
    final Retrofit retrofit = new Retrofit.Builder()
             .baseUrl(BASE_URL)
             .addConverterFactory(GsonConverterFactory.create())
             .build();

    MovieApiInterface apiInterface = retrofit
             .create(MovieApiInterface.class);

    Call<MovieTrailer> movieTrailerCall = apiInterface
             .getListOfMovieTrailers(id, API_KEY);

    movieTrailerCall.enqueue(new Callback<MovieTrailer>() {
         @Override
         public void onResponse(Call<MovieTrailer> call, Response<MovieTrailer> response) {
             MovieTrailer movieTrailer = response.body();
             List<MovieTrailer.ResultsBean> listOfMovies = movieTrailer.getResults();
             ArrayList<String> trailerKeyList = new ArrayList<>();
             for (int i=0; i<listOfMovies.size(); i++){
                 trailerKeyList.add(listOfMovies.get(i).getKey());
                 Log.d("Trailer Key : ", trailerKeyList.get(i)+"");
             }
              intent.putStringArrayListExtra("Trailer Keys", trailerKeyList);
           }

           @Override
           public void onFailure(Call<MovieTrailer> call, Throwable t) {
                t.printStackTrace();
           }
       });
 }

In Second Activity :-

ArrayList<String> listOfTrailers = getIntent().getStringArrayListExtra("Trailers Key");
Log.d("Second Activity", listOfTrailers+"");  // I am getting null here

Your intent data depends on the API response which is not guaranteed, or you can't expect when it occurs, so you need to postpone the startActivity() until you get the API response

To do so, move the startActivity(intent); to the line after intent.putStringArrayListExtra("Trailer Keys", trailerKeyList);

So your code will be:

Intent intent;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    intent = new Intent(this, SecondActivity.class);
    fetchMovieTrailers(5);

}
public void fetchMovieTrailers(int id){
    final Retrofit retrofit = new Retrofit.Builder()
             .baseUrl(BASE_URL)
             .addConverterFactory(GsonConverterFactory.create())
             .build();

    MovieApiInterface apiInterface = retrofit
             .create(MovieApiInterface.class);

    Call<MovieTrailer> movieTrailerCall = apiInterface
             .getListOfMovieTrailers(id, API_KEY);

    movieTrailerCall.enqueue(new Callback<MovieTrailer>() {
         @Override
         public void onResponse(Call<MovieTrailer> call, Response<MovieTrailer> response) {
             MovieTrailer movieTrailer = response.body();
             List<MovieTrailer.ResultsBean> listOfMovies = movieTrailer.getResults();
             ArrayList<String> trailerKeyList = new ArrayList<>();
             for (int i=0; i<listOfMovies.size(); i++){
                 trailerKeyList.add(listOfMovies.get(i).getKey());
                 Log.d("Trailer Key : ", trailerKeyList.get(i)+"");
             }
              intent.putStringArrayListExtra("Trailer Keys", trailerKeyList);
              startActivity(intent);
           }

           @Override
           public void onFailure(Call<MovieTrailer> call, Throwable t) {
                t.printStackTrace();
           }
       });
 }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM