2012-11-05 121 views
2

问题很简单,我对Android并不完全陌生,但我不能在我的生活中检索通过活动A向活动B传递的附加内容。getIntent.getExtras()不返回空值,但没有值。

请参阅活动A:这实际上是一个ListFragment ,它实现了onListItemClick()以通过意图启动另一个活动。

@Override 
public void onListItemClick(ListView l, View v, int position, long id) { 
    Log.i("FragmentList", "Item clicked: " + id); 
    Intent i = new Intent(getActivity(), ExpandedTweetView.class); 
    twitter4j.Status status = adapter.getItem(position); 

    Bundle extras = new Bundle(); 
    extras.putString(KEY_TEXT, status.getText()); 
    extras.putString(KEY_HANDLE, status.getUser().getScreenName()); 
    extras.putString(KEY_NAME, status.getUser().getName()); 
    extras.putString(KEY_TIMESTAMPS, status.getCreatedAt().toString()); 
    extras.putLong(KEY_RETWEETS, status.getRetweetCount()); 

    i.putExtra(KEY_EXTRAS, extras); 
    startActivity(i); 
} 

这部分只是工作,我测试了它USNG Log.v(TAG,“status.getText()”,以确保该错误不是从适配器即将通过的getItem传递一个空项( 。)

下面是活动B代码:

public class ExpandedTweetView extends Activity { 

TextView text; 
TextView name; 
TextView handle; 
TextView createdAt; 
TextView retweets; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.expanded_list_item); 

    Bundle extras = getIntent().getExtras(); 

    ActionBar actionBar = getActionBar(); 
    actionBar.setHomeButtonEnabled(true); 
    actionBar.setDisplayHomeAsUpEnabled(true); 

    text = (TextView) findViewById(R.id.h_content); 
    name = (TextView) findViewById(R.id.h_name); 
    handle = (TextView) findViewById(R.id.h_handle); 
    createdAt = (TextView) findViewById(R.id.h_timestamp); 
    retweets = (TextView) findViewById(R.id.h_retweet_count); 

    if(extras != null) { 
     text.setText(extras.getString(TimelineFragment.KEY_TEXT)); 
     name.setText(extras.getString(TimelineFragment.KEY_NAME)); 
     handle.setText(extras.getString(TimelineFragment.KEY_HANDLE)); 
     createdAt.setText(extras.getString(TimelineFragment.KEY_TIMESTAMPS)); 
     retweets.setText(String.valueOf(extras.getLong(TimelineFragment.KEY_RETWEETS))); 
    } 
} 

正如你所看到的,我相信我现在用的是正确的代码,以获得的额外内容,使用相同的代码上的其他应用程序的工作不知道。为什么在通过意图创建ExpandedTweetView时,所有的textView都是空的。请参阅:https://www.dropbox.com/s/pso6jbyn6rpks9n/empty_activity.png

什么是更奇怪的是,我最初曾试图检查,看看是否捆绑为null调用此:

if (extras == null) { 
Log.v(TAG, "Extras are empty :("); 
} 

但从来没有执行这条线,这意味着该包不为null 。我还认为,也许用于从包中检索单个字符串的关键字是不匹配的;然而,为了弥补这一点,我决定创建可用于双方的常量。正如您在代码中看到的那样,设置Extra和Key以检索Extra的键都是相同的。

任何想法到底是怎么回事?

+0

您可以检查并打印'extras.isEmpty()'的结果。 – varevarao

+0

看看我的回答... –

回答

1

尝试添加额外的变量,以意图而不是捆绑 例:

i.putExtra(KEY_1, a); 
i.putExtra(KEY_2, b); 
i.putExtra(KEY_3, c); 

然后从其他活动的意图 防爆检索:

+1

我试了一下@ Sandy09说过的话后试了一下,这次它工作的很好。 唯一的区别是我叫做extras.getString(Key)。 谢谢! –

1
Bundle extras = getIntent().getExtras(); 
     if (extras != null) { 
      extras = extras.getBundle("KEY_EXTRAS"); 
      String status = extras.getString("KEY_TEXT"); 
     } 
0
//put value 
    Intent inatent = new Intent(this,text.class); 
    inatent_logo.putExtra("message","hello"); 
    startActivity(inatent); 

//get vale 
    String msg = getIntent().getStringExtra("message").toString(); 
0

这是如果您的数据数量较多,难以维护捆绑和捆绑到意图的意图蚂蚁从一项活动分享给其他活动。

只需使用Intent与PuExtra()不同的参数。

你可以传递数据的数量在同样的意图:

发件人端:

创建你的意图。

Intent My_Intent = new Intent(FromClass.this,ToClass.class); 

添加要与其他活动,分享你的价值。

My_Intent.putExtra("VAR_A",a_value); 
My_Intent.putExtra("VAR_B",b_value); 
My_Intent.putExtra("VAR_C",c_value); 

打电话给你的意图。

StartActivity(My_Intent); 

接收方一端:

Intent My_Intent = getIntent(); 
First_Value=My_Intent.getStringExtra("VAR_A"); 
Sec_Value=My_Intent.getStringExtra("VAR_B"); 
Thred_Value=My_Intent.getStringExtra("VAR_C"); 

我认为它方便您将数据从亨德尔一个活动到其他。

1

在活动A:

Intent i = new Intent(MainActivity.this, AnotherActivity.class); 
    Bundle b = new Bundle(); 
    b.putString("thisc", "my name"); 
    i.putExtra("bundle", b); 
    startActivity(i); 

在活性B:

**束髻= getIntent()getBundleExtra( “捆绑”);

如果(bun.containsKey( “thisc”)){

Log.i("TAG", bun.getString("thisc")); 

}否则{

Log.i("TAG", "no thisc"); 

} **

检查的代码的第一行中的活动B,那就是的主要区别居然!!