2016-07-24 6 views
0
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(); 

} 

} 

ich den Code in ein lauffähiges gesetzt haben. Die Logik scheint richtig, aber es funktioniert nicht. Die Methode generate erstellt eine neue Nummer und zeigt sie in 'TV' an. wenn Start geklickt wird, wird eine neue Nummer erzeugt und die zweite Zahl wird mit dem ersten verglichen. wenn die richtige Taste (nach oben oder nach unten) gedrückt wird, wird die Punktzahl erhöht und der Prozess wird fortgesetzt. „Game Over“, wenn die falsche TasteApp stürzt nach nur einer Iteration. Es lief überhaupt nicht ohne Runnable. Und nun stürzt es nach der ersten Iteration

+0

Bitte senden Sie logact und Show zu kommunizieren uns, wo die Anwendung abstürzt. – Gil

+0

https://mega.nz/#!Rp4TiCjB – Chirag

+0

Hey. Könnte ich bitte Ihre E-Mail-ID haben? Ich würde gerne einige Zweifel klären! – Chirag

Antwort

1

geklickt wird können Sie nicht die Benutzeroberfläche von einem anderen Thread berühren. Alle UI-Aufgaben in Android sollten im Hauptthread, auch als UI-Thread bezeichnet, ausgeführt werden. Diese Linie (zum Beispiel) versucht, den ui aus dem Innern des run() Befehl von Nicht-Haupt-Thread zu beeinflussen:

TV.setText(n2); 

Informationen dazu, wie mit UI Thema finden Sie in this tutorial

+0

Hey. Eine Schleife benötigt eine Runnable, um korrekt ausgeführt zu werden. Und UI-Aufgaben können nicht in einem Thread aktualisiert werden. Was passiert, wenn mein Programm erfordert, dass ich meine Aufgaben in einer Schleife aktualisiere? – Chirag

+0

Sie müssen eine Instanz des Haupt-Looper abrufen und Ihre UI über diese Instanz aktualisieren oder die runOnUiThread-Methode verwenden. Schau mal hier http://stackoverflow.com/a/13974916/2031068 –

+0

Ich ersetzte jede Aufgabe im Thread im Runnable mit einem Handler. jetzt, jedes Mal, wenn ich auf Start klicke, stürzt es ab! :( – Chirag

Verwandte Themen