Android - Intent.putExtra () Сбой - PullRequest
       43

Android - Intent.putExtra () Сбой

2 голосов
/ 24 июня 2011

Кажется, я не могу получить дополнительную информацию для отправки вместе с намерением. Намерение загружает следующее действие правильно, но без полезной нагрузки.

Caller:

  //a list item was clicked
  protected void onListItemClick(ListView l, View v, int position, long id)
  {
    super.onListItemClick(l, v, position, id);

    Intent i = new Intent(this, ProgramTracks.class);

    i.putExtra("_id", id);

    startActivity(i);
  }

Получатель:

  protected void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.program_tracks);

    if( savedInstanceState != null )
    {
      mDateId = savedInstanceState != null ? savedInstanceState.getLong("_id") : null;

      Toast.makeText(this, "ID " + mDateId, Toast.LENGTH_SHORT).show();
    }
    else
    {
      Toast.makeText(this, "Null!", Toast.LENGTH_SHORT).show();
    }    
  }

Manifest:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.site.android.app"
    android:versionCode="1" android:versionName="1.0">
    <uses-sdk android:minSdkVersion="8" />
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".MainActivity" android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".ProgramTracks" android:label="@string/app_name">
        </activity>
    </application>
</manifest>

Я не уверен, что мне не хватает, но мой if держит Toasting null.

Редактировать: Если I Toast или Log переменная id, которая получает putExtra() 'd, она установлена.

Ответы [ 7 ]

6 голосов
/ 24 июня 2011

В исходном упражнении вы ставите «_id» в качестве дополнительного значения в своем намерении, но во втором упражнении вы пытаетесь извлечь длинную из saveInstanceState.

Вместо этого вы должны сделать что-то вроде этого:

Intent myIntent = getIntent();
Long id = myIntent.getLongExtra("_id", 0);

Где 0 - это значение по умолчанию, если длинная строка с тегом _id не найдена.

Вот еще один вопрос о разнице между получением дополнительных данных из saveInstanceStateи Intents.

А вот страница разработчика о добавлении / получении дополнений в Intents.

2 голосов
/ 24 июня 2011

getIntent (). GetExtra () выдаст вам пакет

Затем из пакета вы можете получить требуемое значение

1 голос
/ 24 июня 2011

Нирадж был почти прав. Используйте getIntent() для извлечения данных, переданных с намерением, использованным для запуска действия.

mDateId = getIntent().getLongExtra("_id", -1);

savedInstanceState используется для извлечения данных, сохраненных, когда действие приостановлено.

1 голос
/ 24 июня 2011

В onCreate () вашего Receiver вам нужно получить переданную переменную, используя

Bundle extras = getIntent().getExtras();
mDateId = extras.getLong("_id");

saveInstance используется только при воссоздании вашей активности.

1 голос
/ 24 июня 2011

Попробуйте это:

Bundle bundle = getIntent().getExtras();  
long _id = bundle.getLong("_id");
0 голосов
/ 24 июня 2011

использование mDateId = intent.getLongExtra("_id", -1);

if(mDateId != -1)
    Toast.makeText(this, "ID " + mDateId, Toast.LENGTH_SHORT).show();
0 голосов
/ 24 июня 2011

попробуйте

Intent i = new Intent(MainActivity.this, ProgramTracks.class);
...