当前位置: 首页 > 面试题库 >

将可序列化的对象传递给片段时出现“空对象引用”错误

萧允晨
2023-03-14
问题内容

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

bundle.putSerializable("key", Serializable).

我遇到了错误

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

当我尝试将我的对象设置为与活动传递的参数相等时。

这是我的对象

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;
   }
}

接下来是我要传递的活动,我最终希望传递所有四个对象,但是现在我想至少获得一个成功传递的对象。

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();
   }
}

然后是引发Null Pointer
Exception的片段,我已经用“->”包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");


 类似资料:
  • 问题内容: 我正在尝试将自定义对象从活动传递到片段。我选择实现可序列化并使用以下对象传递对象: 我遇到了错误 尝试在空对象引用上调用虚拟方法 当我尝试将我的对象设置为与活动传递的参数相等时。 这是我的对象 接下来是我要传递的活动,我最终希望传递所有四个对象,但是现在我想至少获得一个成功传递的对象。 然后是引发Null Pointer Exception的片段,我已经用“->”包com.cs246.

  • 问题内容: 我有一些来自Android市场的崩溃报告日志,如下所示: 请注意,我使用的是proguard->这就是为什么“缺少”的类名是“ a.ae”的原因。 实际上,“ a.ae”是proguard赋予类“ MyObject”的名称,如下所示。 为什么会发生这种想法? 我认为这与proguard无关,因为如果这是由proguard类重命名引起的问题,它应该一直存在,并且我可以自己重现此问题。 它

  • 我正在做一个小组项目,我们遇到了一个软件序列化部分的问题。我们有类协议: 我们还有SearchResult类: 当我们通过客户端-服务器套接字连接编写协议类时,就会出现问题。问题是Protocol类中的TableModel对象在序列化/反序列化过程中的某个时刻变为null,而我们所做的任何事情都还没有解决这个问题。 到目前为止,我们已尝试: -在SearchResult中实现Serializabl

  • 问题内容: 我正在尝试将可序列化的对象发送到挂起的Intent。问题是接收到的警报返回为空。即使Alarm实现了可序列化的接口。 收到的警报为空。 编辑:我尝试过的一些其他操作如下,但它似乎不起作用: 收到的警报为空。 问题答案: 我正在使用android Nougat,所以这些答案都没有奏效。我最终将对象传递到字节数组中。 然后我收到了Byte []

  • 我需要在rmi服务器中调用一个方法,并从客户端将一个序列化对象传递给该方法,但该对象的类对于服务器来说是未知的

  • 我正在创建一个象棋引擎。我有一个接口,Rook,Bishop等。实现了这个类。我的电路板是一块[]阵列。假设白人球员想移动他的主教。我将目标的坐标和棋盘引用传递给bishop。Bishop检查,如果目的地在同一对角线上,那么它会询问董事会,在他的位置和目的地方块之间是否没有任何碎片。从面向对象的角度来看,这样做可以吗?非常感谢。