将包发送到另一个活动

时间:2011-10-19 01:41:43

标签: android

我正在尝试将捆绑从一个活动发送到另一个活动。当我在接收活动中加载包时,所有信息似乎都为空。这是一些代码:

活动A(发送包):

public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
                Intent intent = new Intent(HotelsActivity.this, EditHotelActivity.class);
                Bundle b = new Bundle();
                b = toBundle(app.getHotelList().get(position));
                intent.putExtra("Hotel Bundle", b);
                startActivity(intent);
            }

            });

toBundle方法只是将对象中的字符串添加到bundle中。我已将日志语句放在此方法中,并且该bundle肯定不是null。

活动B(加载捆绑包):

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView (R.layout.edit_hotel);
        setTitleFromActivityLabel (R.id.title_text);

        // Retrieve sent bundle
        Bundle b = this.getIntent().getExtras();
        String hotelName = b.getString("hotelname");
        if (hotelName == null)
            MyLog.i(TAG, "IT IS NULL");
    }

然后,loggin语句打印“IT IS NULL”,因为某些原因,hotelName为null,但肯定是正确的密钥。

任何人都可以帮忙吗?

toBundle方法:

public Bundle toBundle(HotelItem hotel) {
        Bundle b = new Bundle();
        b.putString("hotelname",hotel.getHotelName());
        b.putString("hotel address", hotel.getHotelAddress());
        b.putString("hotel telephone", hotel.getHotelTelephone());
        b.putString("hotel website", hotel.getHotelWebsite());


        return b;
    }

7 个答案:

答案 0 :(得分:4)

Bundle b = new Bundle();
b = toBundle(app.getHotelList().get(position));
intent.putExtras(b);
startActivity(intent);




//In your next activity
//Create another Bundle object and get the string by name

Bundle bundle = getIntent().getExtras();
if(bundle!=null){
 String hotelName = bundle.getString("hotelname");
}

答案 1 :(得分:1)

您必须使用已发送的确切密钥:

String hotelName = b.getString("hotelname");

已更新!

答案 2 :(得分:1)

活动A(发送包): intent.putExtra("Hotel Bundle", b);

活动B(加载包): getintent().getExtra("Hotel Bundle");

不是getintent().getExtra*s*

答案 3 :(得分:0)

使用Intent.putExtra(Bundle)方法。

 intent.putExtra(b);

答案 4 :(得分:0)

您应该implement Parcelable,而不是使用 toBundle 方法,并将您的对象写入Intent

答案 5 :(得分:0)

我不知道是否还有人需要这个,但在intent.putExtra("Hotel Bundle", b);

您只发送intent.putExtra(b);,以便通过

获取数据
Bundle b = this.getIntent().getExtras();
String hotelName = b.getString("hotelname");

或者如果您想保留Hotel Bundle密钥

Bundle b = this.getIntent().getBundleExtra("Hotel Bundle");
String hotelName = b.getString("hotelname");

对不起,我在这里需要答案,所以不妨帮助那些遇到此问题的人。欢呼声。

答案 6 :(得分:0)

您可以在第一个活动中使用它:

 Intent i = new Intent(Context, your second.class);
        i.putExtra("key_value", "your object");
        startActivity(i);

并在第二个活动中获取对象:

 Intent in = getIntent();
    Bundle content = in.getExtras();
   // check null
        if (content != null) {
            String content = content_search.getString("key_value"); 
    }