Android Can';不检索额外的意图

Android Can';不检索额外的意图,android,android-intent,Android,Android Intent,我有一个包含ImageView中图像的recyclerview的主要活动。单击图像时,将启动详细信息活动 我需要将两个对象传递给一个intent,并在detail活动中检索它们,但由于某些原因,我无法这样做。当我使用调试器时,我可以看到这两个对象都保存在intent extras中 然而,当我在另一边取回它们时,我找不到额外的arraylist 你能帮我找出原因吗 这是我的代码: holder.mImageView.setOnClickListener(new View.OnClickListe

我有一个包含ImageView中图像的recyclerview的主要活动。单击图像时,将启动详细信息活动

我需要将两个对象传递给一个intent,并在detail活动中检索它们,但由于某些原因,我无法这样做。当我使用调试器时,我可以看到这两个对象都保存在intent extras中

然而,当我在另一边取回它们时,我找不到额外的arraylist

你能帮我找出原因吗

这是我的代码:

holder.mImageView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (mActivity.isTwoPaneMode()) {
            Bundle arguments = new Bundle();
            arguments.putParcelable(MovieListActivity.MOVIE,movie);
            arguments.putStringArrayList("TRAILERS", (ArrayList)movie.getTrailerList());
            MovieDetailFragment fragment = new MovieDetailFragment();
            fragment.setArguments(arguments);
            mActivity.getSupportFragmentManager().beginTransaction()
                    .replace(R.id.movie_detail_container, fragment)
                    .commit();
        } else {
            Context context = v.getContext();
            Intent intent = new Intent(context, MovieDetailActivity.class);
            intent.putExtra(MovieListActivity.MOVIE, movie);
            intent.putStringArrayListExtra("TRAILERS", (ArrayList)movie.getTrailerList());

            context.startActivity(intent);
        }
    }
});
关于另一项活动:

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_movie_detail);

        if (savedInstanceState == null) {

            Intent intent = getIntent();
            ArrayList<String> trailers = intent.getStringArrayListExtra("TRAILERS");
            Movie movie = intent.getParcelableExtra(MovieListActivity.MOVIE);
            Bundle arguments = new Bundle();

            arguments.putParcelable(MovieListActivity.MOVIE, movie);

            arguments.putStringArrayList(MovieListActivity.MOVIE,
                    getIntent().getStringArrayListExtra("TRAILERS"));

            MovieDetailFragment fragment = new MovieDetailFragment();
            fragment.setArguments(arguments);

            getSupportFragmentManager().beginTransaction()
                    .add(R.id.movie_detail_container, fragment)
                    .commit();

        }
    }
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u movie\u detail);
如果(savedInstanceState==null){
Intent=getIntent();
ArrayList Trailes=intent.getStringArrayListExtra(“Trailes”);
Movie-Movie=intent.getParcelableExtra(MovieListActivity.Movie);
Bundle参数=新Bundle();
参数.putParcelable(MovieListActivity.MOVIE,MOVIE);
arguments.putStringArrayList(MovieListActivity.MOVIE,
getIntent().getStringArrayListExtra(“拖车”);
MovieDetailFragment=新的MovieDetailFragment();
fragment.setArguments(参数);
getSupportFragmentManager().beginTransaction()
.add(R.id.movie\u detail\u容器,片段)
.commit();
}
}

我的电影类正确地实现了parcelable。

看看Android Intent文档

具体来说,
名称在使用Intent#putStringArrayListExtra时必须包含包前缀,

试着这样做:

intent.putStringArrayListExtra(PACKAGE_NAME + ".TRAILERS", (ArrayList)movie.getTrailerList());

其中PACKAGE_NAME等于应用程序的PACKAGE NAME。

请查看Android Intent文档

具体来说,
名称在使用Intent#putStringArrayListExtra时必须包含包前缀,

试着这样做:

intent.putStringArrayListExtra(PACKAGE_NAME + ".TRAILERS", (ArrayList)movie.getTrailerList());

其中包名称等于应用程序的包名称。

尝试从
包中获取数据,而不是从和
意图中获取数据。通过这种方式,您可以知道数据是否已实际传递给活动,因为如果未传递任何内容,则
捆绑包
将为
null
。还要将包名称添加到数据字符串中

PACKAGE_NAME=getApplicationContext().getPackageName()

arguments.putStringArrayList(PACKAGE_NAME+”预告片,(ArrayList)movie.getTrailerList();
而不是这样做:
Intent-Intent=getIntent();
ArrayList Trailes=intent.getStringArrayListExtra(程序包名称+“Trailes”);

做:

Bundle extras=getIntent().getExtras();
ArrayList拖车;
如果(附加值!=null){
ArrayList Trailes=extras.getStringArrayList(“Trailes”);
}否则{
Toast.makeToast(这是“未传递任何数据”,Toast.LENGTH_LONG.show();
}


如果Toast显示,则表示您的数据未正确传递。

尝试从
捆绑包中获取数据,而不是从和
意图中获取数据。这样,您可以知道数据是否已实际传递给活动,因为如果未传递任何内容,则
捆绑包将为
null
。还可以将包名添加到数据字符串中。

PACKAGE\u NAME=getApplicationContext().getPackageName();

arguments.putStringArrayList(PACKAGE_NAME+”预告片,(ArrayList)movie.getTrailerList();
而不是这样做:
Intent-Intent=getIntent();
ArrayList Trailes=intent.getStringArrayListExtra(包名称+拖车)

做:

Bundle extras=getIntent().getExtras();
ArrayList拖车;
如果(附加值!=null){
ArrayList Trailes=extras.getStringArrayList(“Trailes”);
}否则{
Toast.makeToast(这是“未传递任何数据”,Toast.LENGTH_LONG.show();
}


如果Toast出现,则表示您的数据传递不正确

你确定这是你的活动而不是你的片段吗?如果您在活动内部调试,它是否正确地获取了项目?我正在调试将值(movieAdapter类中的回调)放入的位置和详细信息活动。我没有在片段上调试它调用方是否有任何意图?可能是
movie.getTrailerList()
返回空的或空的对象?实际上,在将对象添加到intent之后,我检查了调试器,发现没有任何对象是空的。您确定这是您的活动而不是片段吗?如果您在活动内部调试,它是否正确地获取了项目?我正在调试将值(movieAdapter类中的回调)放入的位置和详细信息活动。我没有在片段上调试它调用方是否有任何意图?可能是
movie.getTrailerList()
返回空对象或空对象?实际上,在将对象添加到intent之后,我检查了调试器,发现没有任何对象是空的。