sc305495
sc305495

Reputation: 249

getIntent().getStringArrayExtra() always returning null

I've been looking for hours but can't seem to figure out what is going on here. I want to pass an array upon a button press through an intent. In Activity A I have (in the onclick listener)

Intent i = new Intent(getApplicationContext(), classB);
i.putExtra("string",stringArray);
startActivity(i);

and in Activity B I have in the onCreate method

final String theList[] = getIntent().getStringArrayExtra("string");

whenever I attempt to access the array theList as follows

textView.setText(theList[0]);

the program force closes and I can't seem to understand why... I feel like I must be missing somthing blatantly obvious but after hours I can't seem to understand why theList = null.

Thank you and sorry for asking what seems to be a repetitive question.

logcat output

04-10 19:44:52.815: D/AndroidRuntime(1794): Shutting down VM
04-10 19:44:52.815: W/dalvikvm(1794): threadid=1: thread exiting with uncaught exception (group=0x40015560)
04-10 19:44:52.835: E/AndroidRuntime(1794): FATAL EXCEPTION: main
04-10 19:44:52.835: E/AndroidRuntime(1794): java.lang.NullPointerException
04-10 19:44:52.835: E/AndroidRuntime(1794):     at sean.vieten.acm.Athletics$1.onClick(Athletics.java:66)
04-10 19:44:52.835: E/AndroidRuntime(1794):     at android.view.View.performClick(View.java:2485)
04-10 19:44:52.835: E/AndroidRuntime(1794):     at android.view.View$PerformClick.run(View.java:9080)
04-10 19:44:52.835: E/AndroidRuntime(1794):     at android.os.Handler.handleCallback(Handler.java:587)
04-10 19:44:52.835: E/AndroidRuntime(1794):     at android.os.Handler.dispatchMessage(Handler.java:92)
04-10 19:44:52.835: E/AndroidRuntime(1794):     at android.os.Looper.loop(Looper.java:123)
04-10 19:44:52.835: E/AndroidRuntime(1794):     at       android.app.ActivityThread.main(ActivityThread.java:3683)
04-10 19:44:52.835: E/AndroidRuntime(1794):     at java.lang.reflect.Method.invokeNative(Native Method)
04-10 19:44:52.835: E/AndroidRuntime(1794):     at java.lang.reflect.Method.invoke(Method.java:507)
04-10 19:44:52.835: E/AndroidRuntime(1794):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
04-10 19:44:52.835: E/AndroidRuntime(1794):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
04-10 19:44:52.835: E/AndroidRuntime(1794):     at dalvik.system.NativeStart.main(Native Method)    

Problem solved, it seems I had two onclick listeners matched up to the same button, so when I clicked the button multiple intents were created which explains the crash. Very, very foolish error on my part.

Upvotes: 2

Views: 3981

Answers (5)

AllanRibas
AllanRibas

Reputation: 1144

In my case I did like this

val arrayList = arrayListOf<String>()
arrayList.add("data")

Intent(applicationContext, MyService::class.java).apply {
    putExtra("myKey", arrayList)
}

in Service or Activity

val dataArray = intent.getStringArrayListExtra("myKey")!!

Upvotes: 0

Gaurav
Gaurav

Reputation: 181

Activity 1

Bundle b=new Bundle();
b.putStringArray("strings", new String[]{"aaa","bbb"});
Intent intent=new Intent(MainActivity.this,Main2Activity.class);
intent.putExtras(b);
startActivity(intent);

Activity 2

 Intent intent=getIntent();
 Bundle b=intent.getExtras();
 String[] array=b.getStringArray("strings");

Upvotes: 0

yaoyue1019
yaoyue1019

Reputation: 187

i got the same problem,in my case i use

List<String> list = new ArrayList<>;
...
Intent intent = new Intent();
intent.putExtra("string",list.toArray());
...
String strs = intent.getStringArrayExtra("string");

i found that strs is allways null,because list.toArray returns an object array;so we should use an String array instead

List<String> list = new ArrayList<>;
...
Intent intent = new Intent();
String[] strArr = new String[list.size()];
list.toArray(strArr);
intent.putExtra("string",strArr);
...
String strs = intent.getStringArrayExtra("string");

or you can get an ArrayList instead

Intent intent = new Intent();
intent.putStringArrayListExtra("string", arrayList);
...
List<String>  list = intent.getStringArrayListExtra("string");

Upvotes: 1

Gurpreets11
Gurpreets11

Reputation: 2351

In Activity B use this.

 Intent intent= getIntent();

 theList[] = intent.getStringArrayExtra("string");

Upvotes: 1

EvZ
EvZ

Reputation: 12179

1) Don't use getApplicationContext() use Activity's context
2) Use more informational key name than "string"

Good luck

Upvotes: 0

Related Questions