【问题标题】:Null Object Reference on Intent with Arraylist<Hashmap>使用 Arraylist<Hashmap> 对 Intent 的空对象引用
【发布时间】:2019-02-20 04:27:42
【问题描述】:

我在将 Arraylist 传递给下一个 Activity 时遇到问题。 这是我的错误代码。

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.Serializable android.content.Intent.getSerializableExtra(java.lang.String)' on a null object reference

据我了解,我正在尝试获取一个不存在的 Arraylist。 我确保 Arraylist 已填充并且我的 Intend 值正确,但我仍然收到错误。

创建数组列表

ArrayList<HashMap<String, String>> names = new ArrayList<HashMap<String, String>>();

创建意图

Intent intent = new Intent(First.this, Second.class);
            intent.putExtra("names", names);
            startActivity(intent);

获取意图

Intent intent = getIntent();
ArrayList<HashMap<String, String>> usernamen = (ArrayList<HashMap<String, String>>) intent.getSerializableExtra("names");

如前所述,Arraylist 已通过正确填充

name = new HashMap<String, String>();
    name.put("Name", spielername.getText().toString());
    name.put("Gender", gender.getText().toString());
    names.add(name);

如果有人需要更多信息,我很乐意提供。

编辑:

gobutton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            if(names.size() < 2){
                Toast.makeText(Spieler.this, "No Informations", Toast.LENGTH_SHORT).show();
                return;
            }
            Intent intent = new Intent(Spieler.this, Games.class);
            intent.putExtra("level", level.getProgress());
            intent.putExtra("names", names);
            startActivity(intent);
        }
    });

Button 将我发送到第二个 Activity,因此必须填充数组。

【问题讨论】:

  • 你在Intent intent = getIntent();这里重新声明你的intent,你不应该使用你之前声明的意图吗?或者确保您的getIntent() 方法返回intent,也许它返回null。使用调试器检查getIntent()的返回值是否不为空。
  • 也许另一个Activity 中的intent 是空的?因此getSerializableExtra("names") 这个方法是在null 引用上调用的?
  • 你能展示你在其他活动中使用的代码吗?
  • 好了,第一个Activity基本就到了。我有两个 Edittext 和一个按钮中的 Intent。数组正确填充,我通过一个简单的 Toast 进行了检查。
  • Intent intent = getIntent(); 在 Game Activity 中与 null 不同?

标签: java android android-intent arraylist


【解决方案1】:
 ArrayList<HashMap<String,String>> names = new ArrayList<>();

 HashMap<String,String> map = new HashMap<>();

 map.put("Name", "Spieler");

 map.put("Gender", "male");

 names.add(map);

使用 Intent 发送数据

Bundle bundle = new Bundle();

bundle.putSerializable("keyName",names);

Intent i=new Intent(v.getContext(), SecondActivity.class);

i.putExtras(bundle);

startActivity(i);

从 Intent 中获取数据

Intent intent = this.getIntent();

Bundle bundle = intent.getExtras();

Log.e("SecondActivity","yourArrayList--"+(ArrayList<HashMap<String,String>>)bundle.getSerializable("keyName"));

【讨论】:

  • @Specializedx3,标记此正确答案并对其进行投票,以便它也能帮助其他用户。很高兴为您提供帮助
【解决方案2】:

您需要先使用 Bundle 序列化该值:

Bundle bundle = new Bundle(); 
bundle.putSerializable("names", namen); 
intent.putExtras(bundle);

或使用 Serializable 强制转换列表:

intent.putExtra("names", (Serializable) names);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    • 2015-05-01
    • 1970-01-01
    • 2014-02-16
    相关资源
    最近更新 更多