8

android-intent-bundle-always-nullintent-bundle-returns-null-every-time のような質問があることは知ってい ますが、正解はありません。

私の中でActivity 1

public void goToMapView(Info info) {
    Intent intent = new Intent(getApplicationContext(), MapViewActivity.class);
    //intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
    intent.putExtra("asdf", true);
    info.write(intent);
    startActivity(intent);
}

情報:

public void write(Intent intent) {
    Bundle b = new Bundle();
    b.putInt(AppConstants.ID_KEY, id);
    ... //many other attributes
    intent.putExtra(AppConstants.BUNDLE_NAME, b);
}
public static Info read(Bundle bundle) {
    Info info = new Info();
    info.setId(bundle.getInt(AppConstants.ID_KEY));
    ... //many other attributes
    return info;
}

MapViewActivity ( Activity 2):

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.map_view);

    Bundle extras = getIntent().getBundleExtra(AppConstants.BUNDLE_NAME);
    info = Info.read(extras);
    ...
}

問題は、extrasバンドルが常に null であることです。私はそれをデバッグしましたが、Intent ( intent = getIntent()) は、これがどのクラスであるかを示すフィールド ( ) を除いて、すべてのフィールドが null に設定されていますMapViewActivity

intent.putExtras(b)同じ効果でバンドルを介して入れてみました。これintent.putExtra("asdf", true)はデバッグ上の理由のみです。このデータも取得できません (getIntent()ほとんどすべてのフィールドが null に設定されているため)。

編集

以下の答えは正しく、機能しています。これは私のせいでした。バンドルを新しいインテントに正しく渡しませんでした。

4

2 に答える 2

9

「Info」が何のためのものかはわかりませんが、他のデータ オブジェクトを使用する前に、まず、あるアクティビティから別のアクティビティへの最も基本的なデータの受け渡しを行うことをお勧めします。

アクティビティ1

    Intent intent = new Intent(Activity1.this, Activity2.class);
    intent.putExtra("asdf", true);
    info.write(intent);
    startActivity(intent);

アクティビティ2

    Bundle bundle = getIntent.getExtras();
    if (bundle!=null) {
        if(bundle.containsKey("asdf") {
            boolean asdf = bundle.getBooleanExtra("asdf");
            Log.i("Activity2 Log", "asdf:"+String.valueOf(asdf));
        }
    } else {
        Log.i("Activity2 Log", "asdf is null");

    }
于 2012-04-11T14:34:36.140 に答える
4

アクティビティ1

Intent intent = new Intent(getApplicationContext(), MapViewActivity.class);

        Bundle b = new Bundle();
         b.putBoolean("asdf", true);
         b.putInt(AppConstants.ID_KEY, id);
         intent.putExtras(b);

         startActivity(intent);

アクティビティ2

Bundle extras = getIntent().getExtras();

 boolean bool = extras.getBoolean("asdf");
 int m_int = extras.getInt(AppConstants.ID_KEY,-1);
于 2012-04-11T15:59:48.917 に答える