getIntent().getStringArrayExtra() 总是返回 null

问题描述 投票:0回答:5

我已经找了好几个小时了,但似乎不明白这里发生了什么。我想在按下按钮时通过意图传递一个数组。在活动 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 侦听器与同一个按钮匹配,因此当我单击该按钮时,会创建多个意图,这解释了崩溃。我的错误非常非常愚蠢。

android android-intent
5个回答
1
投票

在活动 B 中使用这个。

 Intent intent= getIntent();

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

1
投票

我遇到了同样的问题,就我而言,我使用

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");

0
投票

1) 不要使用

getApplicationContext()
使用
Activity
的上下文
2)使用比“字符串”更具信息性的键名

祝你好运


0
投票

活动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");

0
投票

就我而言,我确实是这样的

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

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

在服务或活动中

val dataArray = intent.getStringArrayListExtra("myKey")!!
© www.soinside.com 2019 - 2024. All rights reserved.