Reputation: 249
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
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
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
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
Reputation: 2351
In Activity B use this.
Intent intent= getIntent();
theList[] = intent.getStringArrayExtra("string");
Upvotes: 1
Reputation: 12179
1) Don't use getApplicationContext()
use Activity
's context
2) Use more informational key name than "string"
Good luck
Upvotes: 0