Android GetExtras不工作

Android GetExtras不工作,android,android-intent,Android,Android Intent,我正试着从活动A发送额外的信息到活动B。 发送部分很好,变量不是空的,但我不知道如何在活动B中获取它们。 这是发送的代码: public void sendToFavorites(Context context){ String vID,vThumbnail,vTitle; vID = sendResult.getId().getVideoId(); vThumbnail = sendResult.getSnippet().getThumb

我正试着从活动A发送额外的信息到活动B。 发送部分很好,变量不是空的,但我不知道如何在活动B中获取它们。 这是发送的代码:

    public void sendToFavorites(Context context){
        String vID,vThumbnail,vTitle;
        vID = sendResult.getId().getVideoId();
        vThumbnail = sendResult.getSnippet().getThumbnails().getMedium().getUrl();
        vTitle = sendResult.getSnippet().getTitle();
        Intent fav = new Intent(context,Favorites.class);
        fav.putExtra("title",vTitle);
        fav.putExtra("thumbnail",vThumbnail);
        fav.putExtra("id",vID);
}
这是获取以下信息的代码:

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.favorites_layout);
    getSupportActionBar().setTitle("Favorites");
    initializeViews();
    //////////////////
    Bundle extras = getIntent().getExtras();
    vidID = extras.getString("id");
    vidTitle = extras.getString("title");
    vidThumbnail = extras.getString("thumbnail");
    loadFavorites();
}
在这里,我开始活动B:

    @Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()){
        case R.id.favorites:
            intent = new Intent(this, Favorites.class);
            startActivity(intent);
    }
    return super.onOptionsItemSelected(item);
}
由于某些原因,当我在没有日志的情况下启动活动B时,应用程序崩溃

我在干什么

    public void sendToFavorites(Context context){
        String vID,vThumbnail,vTitle;
        vID = sendResult.getId().getVideoId();
        vThumbnail = sendResult.getSnippet().getThumbnails().getMedium().getUrl();
        vTitle = sendResult.getSnippet().getTitle();
        Intent fav = new Intent(context,Favorites.class);
        fav.putExtra("title",vTitle);
        fav.putExtra("thumbnail",vThumbnail);
        fav.putExtra("id",vID);
    }
您的
Intent
对象
fav
仅适用于此方法。由于您从未在此方法中调用
startActivity(fav)
,因此无论您如何启动
Activity B
都不会包含您的捆绑数据。有两种可能的替代方案-要么将
fav
声明为类变量,然后再引用它,如下所示:

public class MyClass extends ... {

Intent fav;
//...
    public void sendToFavorites(Context context){
        String vID,vThumbnail,vTitle;
        vID = sendResult.getId().getVideoId();
        vThumbnail = sendResult.getSnippet().getThumbnails().getMedium().getUrl();
        vTitle = sendResult.getSnippet().getTitle();
        fav = new Intent(context,Favorites.class);
        fav.putExtra("title",vTitle);
        fav.putExtra("thumbnail",vThumbnail);
        fav.putExtra("id",vID);
    }

//...later, during a button click....
    if (fav != null) {
       startActivity(fav);
    }
或者,如我所愿,将
sendToFavourites()
方法中的逻辑放在click事件中:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()){
        case R.id.favorites:
            String vID,vThumbnail,vTitle;
            vID = sendResult.getId().getVideoId();
            vThumbnail = sendResult.getSnippet().getThumbnails().getMedium().getUrl();
            vTitle = sendResult.getSnippet().getTitle();
            Intent fav = new Intent(context, Favorites.class); //Could use "this" instead of context if this class extends Activity
            fav.putExtra("title",vTitle);
            fav.putExtra("thumbnail",vThumbnail);
            fav.putExtra("id",vID);
            startActivity(fav);
    }
    return super.onOptionsItemSelected(item);
}    

你是在打电话给startActivity(fav)开始活动B吗?@PPartisan不,活动B在另一个地方开始,我只想发送数据。请你也发布日志。你说活动B在另一个地方开始是什么意思,我发送数据并不意味着任何事情!我会尝试并更新它。我更喜欢第一个想法。这很好-只是在第一个例子中,你必须考虑
fav
为空的情况。也许你可以在第二个补丁中包含代码,作为
if…else…
语句的一部分,以防
fav
没有被实例化。我尝试了第一个想法,但运气不好,它不会进入收藏夹。我试图在sendToFavorites中添加startActivity,但它崩溃了。这是我得到的错误:尝试在空对象引用上调用虚拟方法“android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()”,如果将
LogCat
输出复制到OP中会有所帮助,但是首先我可以问一下,您对
上下文
参数使用了什么吗?如果您的类扩展了
活动
,请尝试使用
而不是
上下文
。如果它扩展了
片段
,请使用
getActivity()