“空对象引用"将可序列化对象传递给片段时出错 [英] "Null Object Reference" Error While Passing a Serializable Object To Fragment

查看:19
本文介绍了“空对象引用"将可序列化对象传递给片段时出错的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在研究这个并尝试了几个小时.我在这篇文章之后拿了一个关于如何将参数传递给片段的例子:将数据从活动发送到android中的片段

I've been researching this and attempting for hours. I've taken after this post for an example of how to pass arguments to a fragment: Send data from activity to fragment in android

我正在尝试将自定义对象从活动传递到片段.我选择实现可序列化并使用以下方法传递对象:

I'm trying to pass a custom object from an activity, to a fragment. I chose to implement serializable and pass the object using:

bundle.putSerializable("key", Serializable).

我收到错误

java.lang.NullPointerException: 尝试在 null 上调用虚方法 java.io.Serializable android.os.Bundle.getSerializable(java.lang.String)对象引用

java.lang.NullPointerException: Attempt to invoke virtual method java.io.Serializable android.os.Bundle.getSerializable(java.lang.String) on a null object reference

当我试图将我的对象设置为等于从活动传入的参数时.

when I'm trying to set my object equal to the arguments passed in from the activity.

这是我的对象

public class Player implements Serializable {

   int attack;
   private int tempAttack;
   int defense;
   private int tempDefense;
   int pop;
   int level;
   String t1Evo;
   String t2Evo;
   String t3Evo;

   public Player() {
      attack = 0;
      tempAttack = 0;
      defense = 0;
      tempDefense = 0;
      pop = 20;
      level = 1;
      t1Evo = null;
      t2Evo = null;
      t3Evo = null;
   }
}

然后这是我要传递的活动,我最终想要传递所有四个对象,但我现在正试图让至少一个成功通过.

Then here is my activity from which I am passing, I eventually want to pass all four of my objects, but I right now I'm trying to get at least one to successfully pass.

public class GameScreen extends FragmentActivity {

// Anytime you need to grab data from the players,
// this screen will hold them.

   private Player player1;
   private Player player2;
   private Player player3;
   private Player player4;


   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       requestWindowFeature(Window.FEATURE_NO_TITLE);
       setContentView(R.layout.activity_game_screen);

       // Instantiate the player objects
       player1 = new Player();
       player2 = new Player();
       player3 = new Player();
       player4 = new Player();

       // put the objects to send to our fragment in a bundle
       PlayerInformation newFragment = new PlayerInformation();
       Bundle args = new Bundle();
       args.putSerializable("Player1", player1);
       newFragment.setArguments(args);

       // start transaction
       FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

       // Replace whatever is in the fragment_player_information view with this fragment,
       transaction.add(R.id.playerInformation, newFragment);
       transaction.commit();
   }
}

然后是抛出空指针异常的片段,我用-->"表示了这一行包 com.cs246.spencer.naturalselection;

And then the fragment which throws the Null Pointer Exception, I've indicated the line with "-->" package com.cs246.spencer.naturalselection;

import android.app.Activity;

import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.io.Serializable;


/**
 * Fragment that displays the Player information on GameScreen
 */
public class PlayerInformation extends Fragment {
   Context context;
   Player player1;
   Player player2;
   Player player3;
   Player player4;

   public PlayerInformation(){
       this.context=context;
   }
   @Override
   public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
       // grab the objects passed from GameScreen
       Bundle args = getArguments();
   --> player1 = (Player) args.getSerializable("Player1");
       player1 = (Player) getArguments().getSerializable("Player1");

       // Inflate the layout for this fragment
       return inflater.inflate(R.layout.fragment_player_information, container, false);
   }

   public void Update() {
       TextView player1Pop = (TextView) ((Activity)context).findViewById(R.id.player1Pop);
       player1Pop.setText(player1.pop);
   }
}

推荐答案

试试这个

player1 = (Player)getActivity().getIntent().getSerializableExtra("Player1");

这篇关于“空对象引用"将可序列化对象传递给片段时出错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆