2016-11-19 7 views
-1

Ich habe dies erforscht und stundenlang versucht. Ich habe nach diesem Beitrag für ein Beispiel zur Übergabe von Argumenten an ein Fragment genommen: Fehler "Null Objektreferenz" beim Übergeben eines serialisierbaren Objekts an Fragment

Ich versuche, ein benutzerdefiniertes Objekt aus einer Aktivität an ein Fragment übergeben. Ich wählte serializable umzusetzen und das Objekt übergeben werden:

bundle.putSerializable("key", Serializable). 

Ich erhalte den Fehler

java.lang.NullPointerException: Versuch virtuelle Methode java.io.Serializable android.os.Bundle.getSerializable(java.lang.String) auf ein Null-Objekt Verweis aufrufen

, wenn ich Ich versuche, mein Objekt gleich den Argumenten zu setzen, die von der Aktivität übergeben wurden.

hier ist mein Objekt

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

Dann ist hier meine Tätigkeit, aus dem ich vorbei bin, möchte ich schließlich alle vier meiner Objekte passieren, aber ich versuche ich jetzt zumindest eine bekommen um erfolgreich zu bestehen.

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

Und dann das Fragment, das die Null-Zeiger-Ausnahme wirft, habe ich die Linie angedeutet mit „->“ Paket 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); 
    } 
} 
+0

warum Sie parceable nicht verwenden? –

+0

es ist schnell und effizient und einfach zu implementieren –

+1

Versuchen Sie args.putSerializable ("Player1", (Serializable) player1); und prüfen, ob es funktioniert – Vickyexpert

Antwort

0

versuchen diese

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