2016-11-04 1 views
0

ボタンをクリックすると、カードのセットからランダムなカードが選択され、ImageViewに表示されます。 これを行うには、値とそのID(Drawableのイメージカード名)のCardクラスがあります。setImageResourceによってアプリケーションがクラッシュする

public class Carte { 

int valeur; 
static String nomCarte; 

public Carte(int valeur, String nomImage) { 

    valeur = this.valeur; 
    nomCarte = this.nomCarte; 
} 

public static String getImageId() { 
    return nomCarte; 
} 
} 

私は[]ボタンドローは、それがタブからランダムなものを選択クリックしたときに、[設定]タブにそれらの52を初期化し、私はそれまでに選んだカードの画像と私のImageViewのを変更しようピックされたカードのIDを取得し、setImageResourceを使用していますが、それは私のアプリケーションがクラッシュするのを助けますか?

は、ここに私のmainActivityコードです:

public class MainActivity extends AppCompatActivity { 

protected Carte tab[]; 
protected ImageView imageCarte; 
protected Button afficherCarte; 

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

    imageCarte = (ImageView) findViewById(R.id.imageCarte); 

    tab = new Carte[]{new Carte(1, "c_1"), new Carte(1, "d_1"), new Carte(1, "h_1"), new Carte(1, "s_1"), 
        new Carte(2, "c_2"), new Carte(2, "d_2"), new Carte(2, "h_2"), new Carte(2, "s_2"), 
        new Carte(3, "c_2"), new Carte(3, "d_3"), new Carte(3, "h_3"), new Carte(3, "s_3"), 
        new Carte(4, "c_4"), new Carte(4, "d_4"), new Carte(4, "h_4"), new Carte(4, "s_4"), 
        new Carte(5, "c_5"), new Carte(5, "d_5"), new Carte(5, "h_5"), new Carte(5, "s_5"), 
        new Carte(6, "c_6"), new Carte(6, "d_6"), new Carte(6, "h_6"), new Carte(6, "s_6"), 
        new Carte(7, "c_7"), new Carte(7, "d_7"), new Carte(7, "h_7"), new Carte(7, "s_7"), 
        new Carte(8, "c_8"), new Carte(8, "d_8"), new Carte(8, "h_8"), new Carte(8, "s_8"), 
        new Carte(9, "c_9"), new Carte(9, "d_9"), new Carte(9, "h_9"), new Carte(9, "s_9"), 
        new Carte(10, "c_10"), new Carte(10, "d_10"), new Carte(10, "h_10"), new Carte(10, "s_10"), 
        new Carte(11, "c_11"), new Carte(11, "d_11"), new Carte(11, "h_11"), new Carte(11, "s_11"), 
        new Carte(12, "c_12"), new Carte(12, "d_12"), new Carte(12, "h_12"), new Carte(12, "s_12"), 
        new Carte(13, "c_13"), new Carte(13, "d_13"), new Carte(13, "h_13"), new Carte(13, "s_13"),}; 


    afficherCarte = (Button) findViewById(R.id.afficherCarte); 
    afficherCarte.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Random r = new Random(); 
      int i1 = r.nextInt(53 - 1) + 1; 
      int id = getResources().getIdentifier(tab[i1].getImageId(), "drawable", getPackageName()); 
      imageCarte.setImageResource(id); 
     } 
    }); 

} 

} 

答えて

0

あなたのコンストラクタは間違っていると、あなたがそれを削除しない場合は、常に同じIDになりますあなたのIMAGEIDの静的フィールドを作りました。

public Carte(int valeur, String nomImage) { 
    valeur = this.valeur; 
    nomCarte = this.nomCarte; 
} 

クラスパラメータにメソッドパラメータを格納することは決してありません。 あなたはそれを周り

this.valeur = valeur; 
this.nomCarte = nomCarte; 

のような他の方法を使用する必要がありますそして、あなたのゲッターは、そのためnullを返しません。それに加えて、これは完璧に動作static修飾子

public String getImageId() { 
    return nomCarte; 
} 
+0

を削除し、私は適切にsetImageResourceを使用しようと、このファイルを編集していたとcompletyが、私は、静的なために作られた編集を忘れてしまいました。コンストラクタについては、それは私の基本的な間違いでした。どうもありがとう ! – Rhohen

+0

@Rhohen問題はありません。答えを受け入れることを忘れないでください。 –

関連する問題