TextView

时间:2016-11-11 19:26:10

标签: android

这是我的代码,它应该打印一个随机值(介于0和1之间),但它没有这样做!

我不知道如何解决它!我尝试了很多东西,但都没有成功!

以下是代码:

package com.example.lode.coder;

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

import java.util.Random;

public class Coder extends AppCompatActivity {
    TextView display;
    String one;
    boolean  bl= true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_coder);
        display = (TextView) findViewById(R.id.text);
    }
    void all() {
        while (bl) {
           Random rand = new Random();
            int n = rand.nextInt(2);
            one = n + (String) display.getText();
            display.setText(one);
        }
    }
}

2 个答案:

答案 0 :(得分:2)

您没有显示调用all()方法的位置。如果没有在任何地方调用它,那就可以解释为什么display永远不会得到任何文本集。

但是假设它在某个地方被调用,那么仍然存在一个大问题:all()方法是一个无限循环。在您将控制权返回到框架之前,您对display所做的任何更改都不会显示在屏幕上。 (事实上​​,当应用程序注意到应用程序没有响应时,您的应用程序可能会被框架杀死。)

如果要连续更改文本,请使用Handler。您可以创建一个Runnable来执行实际更改,然后重新安排自己在短时间后再次运行。不要使用all()中的当前循环。

这样的事情会起作用:

public class Coder extends AppCompatActivity {
    private static long UPDATE_INTERVAL = 500; // every half second -- adjust as needed
    TextView display;
    String one;
    Handler handler;
    Runnable updater;
    Random rand = new Random();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_coder);
        display = (TextView) findViewById(R.id.text);
        Handler handler = new Handler();
        updater = new Runnable() {
            @Override public void run() {
                int n = rand.nextInt(2);
                one = n + display.getText().toString();
                display.setText(one);
                handler.postDelayed(updater, UPDATE_INTERVAL);
            }
        }
    }
    @Override protected void onStart() { // or override onResume() instead
        super.onStart();
        startUpdates();
    }
    @Override protected void onStop() { // or override onPause() instead
        super.onStop();
        stopUpdates();
    }
    void startUpdates() {
        handler.post(updater);
    }
    void stopUpdates() {
        handler.removeCallbacks(updater);
    }
}

答案 1 :(得分:1)

你没有在任何地方调用all()函数,即使你这样做,逻辑仍然是错误的,因为bl总是保持为真,因此while循环是一个永不停止的无限循环。试试这段代码:

public class Coder extends AppCompatActivity {
    TextView display;
    String one;
    boolean  bl= true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_coder);
        display = (TextView) findViewById(R.id.text);
        all();
    }
    void all() {

            Random rand = new Random();
            int n = rand.nextInt(2);
            one = n + display.getText().toString();
            display.setText(one);

           }
}

如果你想要循环,你需要在某些时候将bl变量设置为false以阻止循环无限地继续。