2014-10-17 83 views
0

我有一个问题得到一个简单的循环,在Java中运行就好,在Android中工作。简单的循环工作在Java中,但不是“Android”

我创建了一个textview并将其设置为仅用于测试运行。当我运行这个时,我得到一个数字出现在框中,就是这样,它不会改变为另一个数字。

我试过这个for循环,但所有我得到的是标题栏然后黑屏然后崩溃。

在Eclipse中没有错误,她运行并没有错误,只是没有数字更新。

如果你想知道第二个while循环它有点像暂停,所以你可以看到数字显示较慢,并在纯Java中工作。

Just and FYI我一直在从YouTube上观看vids到学习Java两周。我已经创建了几个Android应用程序,这些应用程序能够完成整理,但无法在Android中获得循环。

感谢任何帮助新人。

public class MainActivity extends ActionBarActivity { 
    TextView display; 
    int counter; 
    int min = 1; 
    int max = 5; 
    int counter2; 

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


     display = (TextView) findViewById(R.id.textView1); 



     while(counter < 10){ 
     Random r = new Random(); 
     int rn = r.nextInt(max - min + 1) + min; 
     String rando = Integer.toString(rn); 
     display.setText(rando); 


     while(counter2 < 5000){ 
      counter2++; 
      } 
     counter++; 
     } 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 
+1

您从未实例化过counter或counter2。你必须先将它们设置为0 ... – aProperFox 2014-10-17 18:14:37

+0

对不起,我知道设置这些,并在一个点做了,但一个视频显示他们不设置为0.我通过添加= 0将它们设置为0;到整数。仍然没有去。 – reddragon72 2014-10-17 18:18:28

+0

啊我更好地阅读你的文章。你为什么期望它显示数以千计的数字?确定它效率低下,需要一段时间,但它以与计算它们相同的速率显示数字,这是非常快的。如果你想看它随着时间的推移而增加,请在那里添加一个Thread.sleep(100)呼叫 – aProperFox 2014-10-17 18:37:21

回答

0

这里只是做一个面包,而不是设置文本视图的,所以你可以看到发生了什么,我改变了你的计数器,以便在接下来的#有一个暂停..如果你这样做了TextView的尝试每次更新后重置在onCreate()之外进行操作,因为只有在创建后才能看到视图,这就是为什么每次暂停都没有看到更改。

while(counter < 10){ 
     Random r = new Random(); 
     int rn = r.nextInt(max - min + 1) + min; 
     String rando = Integer.toString(rn); 
     Toast.makeText(this, rando, 1).show(); 
     //reset your counter to slow the next # down 
     counter2=0; 



     while(counter2 < 50){ 
      counter2++; 
      } 
     counter++; 
     } 

如果您需要以可视化的方式在textview上打印出来,则需要在可以排队的runnable上运行它们。或者,你也可能让一个单独的线程,但继承人一个方式没有一个单独的线程:

public class MainActivity extends ActionBarActivity { 
    TextView display; 
    int counter; 

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


     display = (TextView) findViewById(R.id.textView1); 


      handler = new Handler(); 
//this starts the runnable right away 
      handler.postDelayed(updateTextRunnable, 0); 
     } 
    } 

    private Runnable updateTextRunnable = new Runnable() { 
     public void run() { 
      doStuff(); 

     } 
    }; 

    public void doStuff(){ 

      Random r = new Random(); 
      int rn = r.nextInt(max - min + 1) + min; 
      String rando = Integer.toString(rn); 
      display.setText(rando); 


      //heres the pause, it runs every two seconds 
     if(counter<10) 
      handler.postDelayed(updateTextRunnable, 2000); 
     counter++; 
    } 

    } 
+0

连续Toast将无法正常工作。 – 2014-10-17 19:01:11

+0

我真的只是想让他看看发生了什么,他也可以使用logcat。 – j2emanue 2014-10-17 19:04:28

+0

我拿了这个,在那里留下了textview。奇怪的是,烤面包机显示他们,但不是textview。我正在努力将其变为可运行或循环。我学习android的全新篇章。我希望这会有所帮助。 – reddragon72 2014-10-17 19:21:08

1

Android使用事件驱动的用户界面模型,包括lifecycle event方法,如的onCreate(),在onPause(),各种键/按钮方法等。 这些都需要完成他们的工作,并在几毫秒内返回

要执行更长时间的运行任务 - 包括重复更新 - 您必须使用主/ UI线程以外的线程,包含该线程的众多机制之一或添加其他事件(如通过定时器)。

还要注意,除了UI线程之外,你不能触及任何线程的UI,所以当你的后台方法决定它想改变UI中的某些东西时,它必须将实际的更新操作推送到UI线程,使用诸如runOnUiThread()或处理程序之类的机制。

+0

我看到了生命周期事件,现在正在阅读更多内容。我只是希望Java能够轻松一点。因此,最好创建一个完整的其他课程来运行程序,并链接回UI。将不得不查看我需要做什么来将循环放入它自己的类中,并仍然将text设置为textview。 – reddragon72 2014-10-17 19:27:49