GetExtras不工作 [英] GetExtras not working

查看:117
本文介绍了GetExtras不工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想从活动A发送给额外B.
发送部分是好的,而变量不为空,但我想不通我怎么可以让他们在活动B.
这是送的code:

 公共无效sendToFavorites(上下文的背景下){
        串VID,vThumbnail,vTitle;
        VID = sendResult.getId()getVideoId()。
        vThumbnail = sendResult.getSnippet()getThumbnails()getMedium()的getURL()。;
        vTitle = sendResult.getSnippet()的getTitle()。
        意图最爱=新意图(背景下,Favorites.class);
        fav.putExtra(称号,vTitle);
        fav.putExtra(缩略图,vThumbnail);
        fav.putExtra(ID,VID);
}

这是得到的code:

  @覆盖
保护无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.favorites_layout);
    getSupportActionBar()的setTitle(最爱)。
    initializeViews();
    //////////////////
    捆绑额外= getIntent()getExtras()。
    vidID = extras.getString(ID);
    vidTitle = extras.getString(标题);
    vidThumbnail = extras.getString(缩略图);
    loadFavorites();
}

在这里,我开始活动B:

  @覆盖
公共布尔onOptionsItemSelected(菜单项项){
    开关(item.getItemId()){
        案例R.id.favorites:
            意图=新意图(这一点,Favorites.class);
            startActivity(意向);
    }
    返回super.onOptionsItemSelected(项目);
}

由于某种原因,应用程序崩溃时,我发起活动B有没有日志。

我是什么拨错在做什么?


解决方案

 公共无效sendToFavorites(上下文的背景下){
        串VID,vThumbnail,vTitle;
        VID = sendResult.getId()getVideoId()。
        vThumbnail = sendResult.getSnippet()getThumbnails()getMedium()的getURL()。;
        vTitle = sendResult.getSnippet()的getTitle()。
        意图最爱=新意图(背景下,Favorites.class);
        fav.putExtra(称号,vTitle);
        fav.putExtra(缩略图,vThumbnail);
        fav.putExtra(ID,VID);
    }

意图对象最爱仅适用于本方法。正如你永远不会调用 startActivity(最爱)在此方法中,那么无论你开始活动B 将不包括您的捆绑数据。有两种可能的选择 - 要么申报最爱作为一个类变量以后引用它,像这样:

 公共类MyClass的扩展... {意图最爱;
// ...
    公共无效sendToFavorites(上下文的背景下){
        串VID,vThumbnail,vTitle;
        VID = sendResult.getId()getVideoId()。
        vThumbnail = sendResult.getSnippet()getThumbnails()getMedium()的getURL()。;
        vTitle = sendResult.getSnippet()的getTitle()。
        最爱=新意图(背景下,Favorites.class);
        fav.putExtra(称号,vTitle);
        fav.putExtra(缩略图,vThumbnail);
        fav.putExtra(ID,VID);
    }//...later,点击一个按钮期间....
    如果(最爱!= NULL){
       startActivity(收藏);
    }

或者,就像我会preFER,从你的 sendToFavourites()方法放置逻辑点击事件里面:

  @覆盖
公共布尔onOptionsItemSelected(菜单项项){
    开关(item.getItemId()){
        案例R.id.favorites:
            串VID,vThumbnail,vTitle;
            VID = sendResult.getId()getVideoId()。
            vThumbnail = sendResult.getSnippet()getThumbnails()getMedium()的getURL()。;
            vTitle = sendResult.getSnippet()的getTitle()。
            意图最爱=新意图(背景下,Favorites.class);如果这个类扩展活动//能使用的本,而不是背景
            fav.putExtra(称号,vTitle);
            fav.putExtra(缩略图,vThumbnail);
            fav.putExtra(ID,VID);
            startActivity(收藏);
    }
    返回super.onOptionsItemSelected(项目);
}

I'm trying to send Extras from Activity A to B. The sending part is good, and the variables are not nulls, but I can't figure out how can I get them in Activity B. This is the code of sending:

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

This is the code of getting:

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

Here I start Activity 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);
}

for some reason, the application crashes when I'm launching Activity B with NO log..

What am I doing worng?

解决方案

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

Your Intent object fav only applies to this method. As you never call startActivity(fav) in this method, then however you are starting Activity B will not include your bundled data. There are two possible alternatives - either declare fav as a class variable and reference it later, like so:

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

Or, as I would prefer, place the logic from your sendToFavourites() method inside your click event:

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

这篇关于GetExtras不工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆