Pertanyaan Android getIntent (). GetExtras () mengembalikan null


Saya mencoba memberikan string di antara dua aktivitas. Saya telah melakukan ini di proyek lain menggunakan metode yang sama, tetapi untuk beberapa alasan saya mendapatkan NullPointerException ketika saya memanggil intent.getStringExtra (String). Saya juga mencoba membuat Bundle untuk ekstra melalui

Bundle b = getIntent().getExtras();

tetapi itu juga mengembalikan null. Di bawah ini adalah kode yang saat ini saya coba gunakan.

Aktivitas A:

Intent myIntent = null; 
    String select = "";
            if (selection.equals("Chandelle")) {
                myIntent = new Intent(Commercial.this, Chandelle.class);
                select = "Chandelle";
            } else if (selection.equals("Eights on Pylons")) {
                myIntent = new Intent(Commercial.this, EightsOnPylons.class);
                select = "Eights on Pylons";
            }
 // Start the activity
    if (myIntent != null) {
        myIntent.putExtra("selection", select);
        Log.d("*** OUTBOUND INTENT: ", "" + myIntent.getExtras().get("selection"));
        startActivity(myIntent);
    }

Berikut kode dalam aktivitas B yang mencoba menarik ekstra:

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

    Intent i = getIntent();

    if (i == null) 
        Log.d("***DEBUG****", "Intent was null");
    else
        Log.d("**** DEBUG ***", "Intent OK");

    String MANEUVER_ID  = i.getStringExtra("selection"); //Exception points to this line
    Log.d("*** DEBUG", rec + " " + MANEUVER_ID);

Saya sudah mencoba banyak cara alternatif untuk memberikan ekstra, tetapi mereka semua tampaknya berperilaku seperti ini. Apa yang saya rindukan?


32
2018-05-10 02:22


asal


Jawaban:


Menambahkan .ToString() untuk myIntent.putExtra("selection", select); jadi itu myIntent.putExtra("selection", select.ToString());


12
2018-04-22 23:50



Untungnya saya menemukan posting ini. Saya telah berjuang dengan ini selama berjam-jam dan pada akhirnya saya menyadari bahwa saya mengirim niat saya ke tabHost juga. ;-) Bagi mereka yang masih mengalami masalah dengan ini, dapatkan tambahan dari aktivitas tabHost itu sendiri dan teruskan ke tab anak.

String userID;

. .

 Bundle getuserID = getIntent().getExtras();
    if (getuserID != null) {
        userID = getuserID.getString("userID");
    }

...

 intent = new Intent().setClass(this, Games.class);
    intent.putExtra("userID", userID);
    spec = tabHost.newTabSpec("games").setIndicator("Games",
                      res.getDrawable(R.drawable.tab_games))
                  .setContent(intent);
    tabHost.addTab(spec);

7
2017-09-22 16:26



Coba kode di bawah ini. Saya telah menambahkan penggantian ke kode Anda, yang akan melakukan trik:

@Override
public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState); 

   Intent i = getIntent();

   if (i == null) 
       Log.d("***DEBUG****", "Intent was null");
   else
       Log.d("**** DEBUG ***", "Intent OK");

   String MANEUVER_ID  = i.getStringExtra("selection"); //Exception points to this line
   Log.d("*** DEBUG", rec + " " + MANEUVER_ID);
}

5
2018-06-07 08:34



Jika Anda masih belum memasukkan apa pun ke dalam bundel, itu akan selalu kembali null!

Anda dapat membuat dan mengatur paket sendiri:

Intent i = new Intent( ... );

i.putExtras(new Bundle());

Bundle bundle= i.getExtras(); // (not null anymore)

Atau, berikan nilai dummy hanya untuk memaksa inisialisasi (saya lebih memilih solusi pertama):

Intent i = new Intent( ... );

i.putExtra("dummy", true); 

Bundle bundle= i.getExtras(); // (not null anymore)

2
2017-11-06 13:47



Lihatlah kode Anda, saya pikir itu mungkin terjadi ketika Anda memasukkan sesuatu ke dalam Aktivitas 1. Karena Anda menggunakan "jika ... lain jika", dan Anda tidak memiliki "lain" untuk kasus lain. Jika itu terjadi maka Anda akan mendapatkan nilai nol dalam Kegiatan 2. Periksa kembali kasus ini.


1
2018-05-10 02:33



Dalam aktivitas B Anda di fungsi berikut:

  protected String getStringExtra(Bundle savedInstanceState, String id) {
    String l;
    l = (savedInstanceState == null) ? null : (String) savedInstanceState
            .getSerializable(id);
    if (l == null) {
        Bundle extras = getIntent().getExtras();
        l = extras != null ? extras.getString(id) : null;
    }
    return l;
}

Anda menggunakannya dengan cara berikut dalam aktivitas B:

public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState); 
   String MANEUVER_ID  = getStringExtra(savedInstanceState, "selection");      
}

-1
2018-05-14 19:15