Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何每x秒更新一次textview?_Java_Android_Multithreading_Android Studio_Timer - Fatal编程技术网

Java 如何每x秒更新一次textview?

Java 如何每x秒更新一次textview?,java,android,multithreading,android-studio,timer,Java,Android,Multithreading,Android Studio,Timer,我试图在文本视图中打印选择排序步骤,为此,我希望每5秒使用一次steptext.append()方法 我期望结果与此相似 但它不起作用,我得到了这个I/编舞:跳过了1084帧!应用程序可能在其主线程上做了太多工作。 public class steps extends Fragment { private static final String ARG_PARAM1 = "inpuut"; private String minpuut; private OnFr

我试图在文本视图中打印选择排序步骤,为此,我希望每5秒使用一次
steptext.append()
方法

我期望结果与此相似

但它不起作用,我得到了这个
I/编舞:跳过了1084帧!应用程序可能在其主线程上做了太多工作。

    public class steps extends Fragment {
    private static final String ARG_PARAM1 = "inpuut";
    private String minpuut;
    private OnFragmentInteractionListener mListener;

    private TextView inputEntred  ;
    private TextView  steptext ;

    @Override
    public void onResume() {
        super.onResume();
        String[] numberList = inputEntred.getText().toString().split(","); 

        final Integer[] numbers = new Integer[numberList.length];

        for (int i = 0; i < numberList.length; i++) {

            numbers[i] = Integer.parseInt(numberList[i]);
        }
    }

    public static int  Nswaps =0; 

     public String selectionSteps(Integer[] arr) throws InterruptedException {
        System.out.println(Arrays.toString(arr));
        int n = arr.length;
        int Ccounter=0; 

        for (int i = 0; i < n-1; i++)
        {          
            int min_idx = i;    
            for (int j = i+1; j < n; j++)   {
                Ccounter++;                  
             steptext.append(" comparison "+Ccounter +" :  comparing "+ arr[i]+" and "+ arr[j]+" \n");
                Thread.sleep(5000);

                if (arr[j] < arr[min_idx])
                {
                    min_idx = j ;
                    steptext.append( "("+arr[j]+"<"+arr[i] +") TRUE ,  swap positions \n");
                    Thread.sleep(5000);
                    swap(arr,min_idx, i);
                    steptext.append("  swap  : ");
                    steptext.append(Arrays.toString(arr)+"\n");
                    Thread.sleep(5000);
                    }
                else

                steptext.append( "("+arr[j]+"<"+ arr[i]+")   FALSE , no swaping \n");;
                Thread.sleep(5000);

            }
            swap(arr,min_idx, i);
        }

        System.out.println(Ccounter);


        return null;
    }

    public static void swap(Integer[] a, int i, int j) {
        int e = a[i];
        a[i] = a[j];
        a[j] = e;
        Nswaps++ ;
    }
}
公共类步骤扩展片段{
私有静态最终字符串ARG_PARAM1=“inpuut”;
私有字符串minpuut;
私有OnFragmentInteractionListener mListener;
私有文本视图输入;
私有文本查看步骤文本;
@凌驾
恢复时公开作废(){
super.onResume();
字符串[]numberList=inpunterId.getText().toString().split(“,”);
最终整数[]数字=新整数[numberList.length];
for(int i=0;isteptext.append(“(“+arr[j]+”您是否搜索了该问题

你不应该在android UI线程中使用Thread.sleep。如果有一些繁重的工作要运行,请在另一个线程上执行主题,当他们完成时,调用UI线程并更新TextView

在您的情况下,您可以使用以下内容:

Handler handler = new Handler();
updater = new Runnable() {
    @Override
    public void run() {
        // Do one step of sorting here
        steptext.append("Your swaps steps");
        handler.postDelayed(updater,5000);
            }
    };
handler.post(updater);

您可以使用另一种方法

看起来您正在从主线程调用
Thread.sleep()
,这将解释您收到的警告/错误消息。您应该将工作卸载到另一个线程,然后只从主线程更新TextView。