2017-07-12 5 views
0

Ich versuche, 5 Edittext-Werte in eine Arraylist zu übergeben und dann an eine andere Aktivität zu senden. Ich benutze Absicht, um es zur nächsten Aktivität zu schicken, aber es stürzt immer weiter ab. Ich bekomme diese Fehlermeldung:Wie kann man mehrere Edittext-Werte an eine Arraylist übergeben und sie dann an eine andere Aktivität senden?

java.lang.NullPointerException: Attempt to read from null array

Ich denke, die Art, wie ich die Werte in die Arraylist hinzufügen, ist falsch oder etwas falsch mit den arraylist in der Absicht, zu senden.

Aktivität 1:

EditText p1, p2, p3, p4, p5; 
ArrayList<String> playerList = new ArrayList<>(); 
BootstrapButton btnStart; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    btnStart = (BootstrapButton) findViewById(R.id.start); 
    p1 = (EditText) findViewById(R.id.player1); 
    p2 = (EditText) findViewById(R.id.player2); 
    p3 = (EditText) findViewById(R.id.player3); 
    p4 = (EditText) findViewById(R.id.player4); 
    p5 = (EditText) findViewById(R.id.player5); 

    playerList.add(p1.getText().toString()); 
    playerList.add(p2.getText().toString()); 
    playerList.add(p3.getText().toString()); 
    playerList.add(p4.getText().toString()); 
    playerList.add(p5.getText().toString()); 

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

      Intent myIntent = new Intent(MainActivity.this, GameActivity.class); 
      myIntent.putStringArrayListExtra("player_list", playerList); 
      MainActivity.this.startActivity(myIntent); 
     } 

    }); 
    } 

Aktivität 2:

TextView playerName; 
ArrayList<String> playerList = new ArrayList<>(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_game); 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

    playerName = (TextView) findViewById(R.id.playerName); 

    Intent myIntent = getIntent(); 
    if(myIntent != null){ 
     playerList = myIntent.getStringArrayListExtra("player_list"); 
     playerName.setText(playerList.get(0)); 
    } 
    } 

Wenn ich es so mit dem hartcodierten Array bin mit Werten, die sie nicht abstürzt und der Wert wird korrekt ausgedruckt werden in die nächste Aktivität.

Aktivität 1:

String[] array1={"asd","fgh","dcf","dg","ere","dsf"}; 
Intent myIntent = new Intent(MainActivity.this, GameActivity.class); 
myIntent.putExtra("player_list", array1); 
MainActivity.this.startActivity(myIntent); 

Aktivität 2:

Intent myIntent = getIntent(); 
    if(myIntent != null){ 
     String[] players = myIntent.getStringArrayExtra("player_list"); 
     playerName.setText(players[2]); 
    }else{ 
     System.out.println("Error!"); 
    } 

Was ich will ein Arraylist wie diese ["p1","p2","p3","p4","p5"] ist zu tun haben und dann in die nächste Aktivität der arraylist Abrufen und ein zufälliges Ausdrucken Name aus diesem Array.

+2

Gibt es etwas in den Bearbeitungstexten? Sie erhalten sofort Werte aus den Bearbeitungstexten, sobald die Aktivität beginnt. Wenn in ihnen nichts enthalten ist, würden Sie im Wesentlichen leere Strings zu einem Array hinzufügen. – Rafa

+0

wird 'playerList' deklariert? – Stardust

+0

Auch, wenn Sie sie testen, verwenden Sie ein 'Array', und in Ihrer tatsächlichen Implementierung verwenden Sie eine' ArrayList' – Rafa

Antwort

1

Verwenden intent.putStringArrayListExtra in Aktivität 1 zu senden und getStringArrayListExtra() in Activity 2 den String Arraylist abzurufen.

Hier ist der Code zu tun, so:

Aktivität 1:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    btnStart = (BootstrapButton) findViewById(R.id.start); 
    p1 = (EditText) findViewById(R.id.player1); 
    p2 = (EditText) findViewById(R.id.player2); 
    p3 = (EditText) findViewById(R.id.player3); 
    p4 = (EditText) findViewById(R.id.player4); 
    p5 = (EditText) findViewById(R.id.player5); 

    playerList.add(p1.getText().toString()); 
    playerList.add(p2.getText().toString()); 
    playerList.add(p3.getText().toString()); 
    playerList.add(p4.getText().toString()); 
    playerList.add(p5.getText().toString()); 

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

      Intent myIntent = new Intent(MainActivity.this, GameActivity.class); 
      myIntent.putStringArrayListExtra("player_list", playerList); 
      MainActivity.this.startActivity(myIntent); 
     } 

    }); 
    } 

Aktivität 2:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_game); 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

    playerName = (TextView) findViewById(R.id.playerName); 

    Intent myIntent = getIntent(); 
    if(myIntent != null){ 
      ArrayList<String> players = myIntent.getStringArrayListExtra("player_list"); 
      playerName.setText(players.get(0)); 
     }else{ 
      System.out.println("Error!"); 
     } 
     } 

außerdem sicher, dass Spieler machen deklariert und initialisiert. Dein Code zeigt nicht, dass er deklariert oder initialisiert wird.

2

Verwenden getStringArrayListExtra nicht getStringArrayExtra

if(myIntent != null){ 
     String[] players = myIntent.getStringArrayListExtra("player_list"); 
     playerName.setText(players[2]); 
    } 
Verwandte Themen