我已经找了好几个小时了,但似乎不明白这里发生了什么。我想在按下按钮时通过意图传递一个数组。在活动 A 中我有(在 onclick 侦听器中)
Intent i = new Intent(getApplicationContext(), classB);
i.putExtra("string",stringArray);
startActivity(i);
在 Activity B 中,我在 onCreate 方法中
final String theList[] = getIntent().getStringArrayExtra("string");
每当我尝试访问数组 theList 时,如下所示
textView.setText(theList[0]);
程序强制关闭,我似乎无法理解为什么......我觉得我一定错过了一些明显明显的东西,但几个小时后我似乎无法理解为什么 theList = null。
谢谢您,很抱歉问了一个似乎重复的问题。
logcat 输出
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)
问题已解决,似乎我有两个 onclick 侦听器与同一个按钮匹配,因此当我单击该按钮时,会创建多个意图,这解释了崩溃。我的错误非常非常愚蠢。
在活动 B 中使用这个。
Intent intent= getIntent();
theList[] = intent.getStringArrayExtra("string");
我遇到了同样的问题,就我而言,我使用
List<String> list = new ArrayList<>;
...
Intent intent = new Intent();
intent.putExtra("string",list.toArray());
...
String strs = intent.getStringArrayExtra("string");
我发现strs总是null,因为list.toArray返回一个对象数组;所以我们应该使用String数组来代替
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");
或者你可以使用 ArrayList 来代替
Intent intent = new Intent();
intent.putStringArrayListExtra("string", arrayList);
...
List<String> list = intent.getStringArrayListExtra("string");
1) 不要使用
getApplicationContext()
使用 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);
活动2
Intent intent=getIntent();
Bundle b=intent.getExtras();
String[] array=b.getStringArray("strings");
就我而言,我确实是这样的
val arrayList = arrayListOf<String>()
arrayList.add("data")
Intent(applicationContext, PlayerService::class.java).apply {
putExtra("myKey", arrayList)
}
在服务或活动中
val dataArray = intent.getStringArrayListExtra("myKey")!!