Почему я получаю нулевое значение из списка, который передается из другой деятельности? - PullRequest
1 голос
/ 24 марта 2020

В моем проекте я звоню по адресу themoviedb api и onResponse, я хочу поделиться списком с другими действиями. Когда я прохожу, я получаю нулевое значение из списка в других действиях.

Вот мой файл MainActivity.class: -

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();
           }
       });
 }

Во втором действии: -

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

1 Ответ

1 голос
/ 24 марта 2020

Данные о вашем намерении зависят от ответа API, который не гарантирован, или вы не можете ожидать, когда он произойдет, поэтому вам нужно отложить startActivity() до получения ответа API

. переместите startActivity(intent); на строку после intent.putStringArrayListExtra("Trailer Keys", trailerKeyList);

, поэтому ваш код будет:

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();
           }
       });
 }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...