2016-07-03 15 views
1

Ich bin in App-Programmierung nicht wirklich erlebt, so kann die Lösung einfach sein ...in eine andere Klasse in der Hauptaktivitätsklasse aufrufen android

Ich mache eine App Noten für ein Kartenspiel zu zeigen und ich nämlich Runde wollte in einer anderen Klasse bestimmte Werte speichern,

public class Round { 
    int[] score1, score2, roem1, roem2; 
    public void initialize(){ 
     score1 = new int[4]; 
     score2 = new int[4]; 
     roem1 = new int[4]; 
     roem2 = new int[4]; 

     for(int i = 0; i < 4; i++){ 
      score1[i] = 0; 
      score2[i] = 0; 
      roem1[i] = 0; 
      roem2[i] = 0; 
     } 
    } 
    public void setPoints(int game, int s1, int s2) { 
     score1[game] = s1; 
     score2[game] = s2; 
    } 
    public void setRoem(int game, int r1, int r2) { 
     roem1[game] = r1; 
     roem2[game] = r2; 
    } 
    public int getPoints1(int game){ 
     return score1[game]; 
    } 
    public int getPoints2(int game){ 
     return score2[game]; 
    } 
    public int getRoem1(int game){ 
     return roem1[game]; 
    } 
    public int getRoem2(int game){ 
     return roem2[game]; 
    } 
} 

Was passiert aber, wenn ich versuche, das Round-Objekt, meine App stürzt zu erstellen. Es handelt sich um den Teil des Codes aus der Hauptklasse.

Was ich denke ist, dass die Verwendung einer anderen Klasse in einer Aktivität die App abstürzt, aber ich weiß nicht, wie ich es lösen soll. Hier ist die vollständige Hauptaktivitätsklasse

public class MainActivity extends AppCompatActivity { 

    TextView roundNr, gameNr; 
    Button roundPlus, roundMinus; 
    Button gamePlus, gameMinus; 
    EditText points1, points2; 

    Round[] round; 

    String team1, team2; 

    int roundNumber = 1, gameNumber = 1; 
    int score1Total, score2Total, roem1Total, roem2Total; 
    int p; 


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

     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       round = new Round[4]; 
       for(int i = 0; i < 4; i++){ 
        round[i].initialize(); 
       } 
      } 
     }).start(); 

     roundNr = (TextView) findViewById(R.id.roundNr); 
     roundNr.setText("1"); 

     gameNr = (TextView) findViewById(R.id.gameNr); 
     gameNr.setText("1"); 

     roundPlus = (Button) findViewById(R.id.roundPlus); 
     roundPlus.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       roundNumber++; 
       if (roundNumber <= 4) { 
        roundNr.setText(Integer.toString(roundNumber)); 
       } 
       else { 
        roundNumber--; 
       } 
      } 
     }); 
     roundMinus = (Button) findViewById(R.id.roundMinus); 
     roundMinus.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       roundNumber--; 
       if (roundNumber >= 1) { 
        roundNr.setText(Integer.toString(roundNumber)); 
       } 
       else { 
        roundNumber++; 
       } 
      } 
     }); 

     gamePlus = (Button) findViewById(R.id.gamePlus); 
     gamePlus.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       gameNumber++; 
       if (gameNumber <= 4) { 
        gameNr.setText(Integer.toString(gameNumber)); 
       } 
       else { 
        roundNumber++; 
        if (roundNumber <= 4) { 
         roundNr.setText(Integer.toString(roundNumber)); 
         gameNumber = 1; 
         gameNr.setText(Integer.toString(gameNumber)); 
        } 
        else { 
         roundNumber--; 
         gameNumber--; 
        } 
       } 
      } 
     }); 
     gameMinus = (Button) findViewById(R.id.gameMinus); 
     gameMinus.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       gameNumber--; 
       if (gameNumber >= 1) { 
        gameNr.setText(Integer.toString(gameNumber)); 
       } 
       else { 
        roundNumber--; 
        if (roundNumber >= 1) { 
         roundNr.setText(Integer.toString(roundNumber)); 
         gameNumber = 4; 
         gameNr.setText(Integer.toString(gameNumber)); 
        } 
        else { 
         roundNumber++; 
         gameNumber++; 
        } 
       } 
      } 
     }); 

     points1 = (EditText) findViewById(R.id.points1); 
     points1.setText("0"); 
     points1.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

      } 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 
       if (!s.toString().equals("")){ 
        p = Integer.parseInt(s.toString()); 
        points2.setText(Integer.toString(162 - p)); 
       } 
      } 

      @Override 
      public void afterTextChanged(Editable s) { 

      } 
     }); 

     points2 = (EditText) findViewById(R.id.points2); 
     points2.setText("0"); 
    } 
} 
+1

Sie müssen ein Absturzprotokoll anfügen, um anzuzeigen, welche Ausnahme den Absturz verursacht. – solosodium

+0

Welche Fehlermeldung erhalten Sie, wenn es abstürzt ??? –

Antwort

2

Das Problem ist, dass Sie round Variable Array initialisieren, aber nicht round Artikel.

Hier ist die korrekte Funktion:

public class MainActivity extends AppCompatActivity { 
    Round[] round; 

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

     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       round = new Round[4]; 
       for(int i = 0; i < 4; i++){ 
        round[i] = new Round(); 
        round[i].initialize(); 
       } 
      } 
     }).start(); 
    } 
} 

Ich schlage vor, auch initialize Funktion zu ändern und ein Konstruktor zu machen.

+0

Vielen Dank, das habe ich komplett vergessen, da ich nur das Array des Objekts aufgerufen habe. Ich habe auch den Konstruktor hinzugefügt, danke auch für diesen Vorschlag. –

Verwandte Themen