2016-07-24 67 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(); 

} 

} 

我已經把代碼放在一個可運行的。邏輯似乎是正確的,但它不起作用。生成方法會創建一個新號碼並將其顯示在'TV'中。當點擊開始時,會生成一個新號碼,並將第二個號碼與第一個號碼進行比較。如果按下了正確的按鈕(向上或向下),分數會增加並且過程繼續。如果單擊了錯誤的按鈕,則「遊戲結束」應用程序在一次迭代後崩潰。沒有可運行的情況,它根本沒有運行。現在它第一次迭代後崩潰

+0

請張貼logact和展示交流信息我們應用程序崩潰的地方。 – Gil

+0

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

+0

嘿。我可以收到你的電子郵件ID嗎?我很想澄清一些疑惑! – Chirag

回答

1

您無法觸摸另一個線程的UI。 Android中的所有UI任務應在主線程(也稱爲UI線程)中執行。 這條線(例如)試圖從非主線程的run()命令內影響到用戶界面:

TV.setText(n2); 

有關如何與UI線程是指this tutorial

+0

嘿。循環需要可運行才能正確執行。並且UI任務不能在線程中更新。如果我的程序要求我在循環中更新我的任務會怎樣? – Chirag

+0

您需要獲取主循環的實例並通過該實例更新您的UI或使用runOnUiThread方法。看看這裏http://stackoverflow.com/a/13974916/2031068 –

+0

我用一個處理程序替換了可運行的線程中的每個任務。現在,每次我點擊開始,它崩潰! :( – Chirag

相關問題