2016-06-14 3 views
1

Я пытаюсь отправить пакет из одной активности в другую. Когда я загружаю связку в процессе записи, вся информация кажется нулевой. Вот код:Android Как отправить Bundle на другую работу?

BaseActivity.java

private final DrawerLayout.DrawerListener mDrawerListener = new DrawerLayout.DrawerListener() { 
      @Override 
      public void onDrawerSlide(View drawerView, float slideOffset) { 
       if (mDrawerToggle != null) mDrawerToggle.onDrawerSlide(drawerView, slideOffset); 
      } 

      @Override 
      public void onDrawerOpened(View drawerView) { 
       if (mDrawerToggle != null) { 
        mDrawerToggle.onDrawerOpened(drawerView); 
       } 
       if (getSupportActionBar() != null) getSupportActionBar().setTitle(R.string.app_name); 
      } 

      @Override 
      public void onDrawerClosed(View drawerView) {  // 사이드 바에서 선택한 리스트 동작 
       if (mDrawerToggle != null) mDrawerToggle.onDrawerClosed(drawerView); 
       if (mItemToOpenWhenDrawerCloses >= 0) { 
        Bundle extras = ActivityOptions.makeCustomAnimation(
          BaseActivity.this, R.anim.fade_in, R.anim.fade_out).toBundle(); 
        Bundle mediaExtras = new Bundle(); 

        Class activityClass = null; 
        switch (mItemToOpenWhenDrawerCloses) { 
         case R.id.navigation_allmusic: 
          activityClass = MusicPlayerActivity.class; 
          break; 
         case R.id.navigation_album: 
          mediaExtras.putString(SAVED_MEDIA_ID, MEDIA_ID_MUSICS_BY_ALBUM); 
          Log.d("123qwer", "onDrawerClosed, mediaExtras -> " + SAVED_MEDIA_ID + " " + MEDIA_ID_MUSICS_BY_ALBUM); 
          activityClass = MusicPlayerActivity.class; 
          break; 
         case R.id.navigation_playlists: 
          //TODO:add class later 
    //      activityClass = PlaceholderActivity.class; 
          break; 
        } 
        if (activityClass != null) { 
         setBundleInfo(mediaExtras); 
         startActivity(new Intent(BaseActivity.this, activityClass).putExtras(mediaExtras), extras); 
         finish(); 
        } 
       } 
      } 

      @Override 
      public void onDrawerStateChanged(int newState) { 
       if (mDrawerToggle != null) mDrawerToggle.onDrawerStateChanged(newState); 
      } 
     }; 

MusicPlayerActivity.java

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


     Log.d("123qwer", "Get Bundle Test " + this.getIntent().getExtras().getString(SAVED_MEDIA_ID)); 
     initializeFromParams(savedInstanceState, getIntent()); 
    } 

Я хочу, чтобы отправить mediaExtras Bundle в классе BaseActivity на другой вид деятельности, когда я нажимаю некоторые кнопки. Вы можете увидеть эту часть в BaseActivity.

case R.id.navigation_album: 
    mediaExtras.putString(SAVED_MEDIA_ID, MEDIA_ID_MUSICS_BY_ALBUM); 
    Log.d("123qwer", "onDrawerClosed, mediaExtras -> " + SAVED_MEDIA_ID + " " + MEDIA_ID_MUSICS_BY_ALBUM); 
    activityClass = MusicPlayerActivity.class; 
    break; 

Я попытался поместить информацию о струнах в mediaExtras. Но, когда я попытался получить это, я получил нулевое значение.

this.getIntent().getExtras().getString(SAVED_MEDIA_ID) 

Пожалуйста, научи меня, как решить это

+0

Возможный дубликат [Android \ _ Как я могу отправить Bundle в другую активность?] (Http://stackoverflow.com/questions/37799762/android-how-can-i-send-a-bundle-to -another-activity) – Arjan

+0

Выводит ли эта строка на логарифм? 'Log.d ("123qwer", "onDrawerClosed, mediaExtras ->" + SAVED_MEDIA_ID + "" + MEDIA_ID_MUSICS_BY_ALBUM);' –

+0

Что у виду '... putExtras (mediaExtras), дополнительные)'? и 'mediaExtras' и' extras' оба являются объектами Bundle. использовать ключ в качестве первых паров в putExtras добавить Bundle в Intent затем использовать тот же ключ для доступа к Bundle в следующей деятельности –

ответ

4

У вас есть несколько вариантов ниже:

1) С помощью Bundle от Намерения:

Intent mIntent = new Intent(this, Example.class); 
Bundle extras = mIntent.getExtras(); 
extras.putString(key, value); 

2) Создание нового Bundle

Intent mIntent = new Intent(this, Example.class); 
Bundle mBundle = new Bundle(); 
mBundle.putString(key, value); 
mIntent.putExtras(mBundle); 

3) С помощью putExtra() метода быстрого умысла

Intent mIntent = new Intent(this, Example.class); 
mIntent.putExtra(key, value); 

Затем, в запущенной деятельности, вы бы читать их с помощью:

String value = getIntent().getExtras().getString(key) 

ПРИМЕЧАНИЕ: Связки имеют «получить» и «поставить» методы для всех примитивных типов, Parcelables и Serializables. Я просто использовал Strings для демонстрационных целей.

0

Сначала создайте bundel данных и прикрепить его намерению

Intent mainIntent = new Intent(getApplicationContext(),XXXX.class); 
Bundle dataBundle = new Bundle(); 
dataBundle.putString("keyid","thevalue"); 
mainIntent.putExtras(dataBundle); 
startActivity(mainIntent); 

, чтобы получить этот пакет в XXXX активность

//getting the datbundel from other activity incoming 
Bundle extras = getIntent().getExtras(); 
String a=extras.getString("keyid"); 
Смежные вопросы