たった1回の反復でアプリがクラッシュします。実行可能なしではまったく実行されませんでした。そして今、それは最初の反復の後にクラッシュします

チラグ
 package com.example.chirag.example;

 import android.support.v7.app.AppCompatActivity;
 import android.os.Bundle;
 import android.view.View;
 import android.widget.Button;
 import android.widget.TextView;

 import java.util.Random;


 public class MainActivity extends AppCompatActivity {
TextView TV;
Button upbutton;
Button downbutton;
TextView score;
String n1;
int bool=0;
int a;
int b;
int sc=0;

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    TextView TV = (TextView)findViewById(R.id.TV);
    TextView score = (TextView)findViewById(R.id.score);
    Button upbutton = (Button) findViewById(R.id.upbutton);
    Button downbutton = (Button) findViewById(R.id.downbutton);
    Button start = (Button) findViewById(R.id.start);
    n1 = generate();
    TV.setText(n1);
    start.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            start();
        }
    });
}
String generate()
{
    TextView TV = (TextView)findViewById(R.id.TV);
    int n = new Random().nextInt(20);
    String s = String.valueOf(n);
    return s;
}
void start() {
    Runnable  myRunnable = new Runnable() {
        @Override
        public void run()
        {while (bool == 0) {
            final TextView TV = (TextView) findViewById(R.id.TV);
            final TextView score = (TextView) findViewById(R.id.score);
            Button upbutton = (Button) findViewById(R.id.upbutton);
            Button downbutton = (Button) findViewById(R.id.downbutton);
            Button start = (Button) findViewById(R.id.start);
            String n2 = generate();
            TV.setText(n2);

            a = Integer.valueOf(n1.toString());
            b = Integer.valueOf(n2.toString());
            if (a > b) {
                downbutton.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        String n3 = generate();
                        TV.setText(n3);
                        a = b;
                        b = Integer.valueOf(n3.toString());
                        score.setText("Score" + (sc + 1));
                    }
                });
                upbutton.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        TV.setText("Game Over");
                        bool = 1;
                    }
                });
            } else {
                upbutton.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        String n3 = generate();
                        TV.setText(n3);
                        a = b;
                        b = Integer.valueOf(n3.toString());
                        score.setText("Score" + (sc + 1));
                    }
                });
                downbutton.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        TV.setText("Game Over");
                        bool = 1;
                    }
                });
            }
        }

        }
    };


    Thread myThread = new Thread(myRunnable);
    myThread.start();

}

}

コードをランナブルに入れました。ロジックは正しいようですが、機能しません。generateメソッドは新しい番号を作成し、それを「TV」に表示します。開始をクリックすると、新しい番号が生成され、2番目の番号が最初の番号と比較されます。正しいボタン(上または下)が押されると、スコアが増加し、プロセスが続行されます。間違ったボタンがクリックされた場合の「ゲームオーバー」

Evgeniy Mishustin

別のスレッドからUIに触れることはできません。AndroidのすべてのUIタスクは、UIスレッドとも呼ばれるメインスレッドで実行する必要があります。この行は(たとえば)run()非メインスレッドのコマンド内からUIに影響を与えようとします:

 TV.setText(n2);

UIスレッドと通信する方法については、このチュートリアルを参照してください。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ