简体   繁体   English

Android Studio Java Runnable未运行

[英]Android Studio Java runnable not running

I do not know why, but my runnable is not working. 我不知道为什么,但是我的跑步机无法正常工作。 I am very new to programming. 我对编程非常陌生。 Please help me. 请帮我。

@Override
public void onCreate() {

    Toast.makeText(ApplicationContextProvider.getContext(), "Service Template", Toast.LENGTH_SHORT).show();

    handler = new Handler();
    runnable = new Runnable() {
        public void run() {
            Toast.makeText(ApplicationContextProvider.getContext(), "Runnable", Toast.LENGTH_LONG).show();


            Calendar calendar = Calendar.getInstance();
            int day = calendar.get(Calendar.DAY_OF_WEEK);
            if (day == Calendar.WEDNESDAY){
                Toast.makeText(ApplicationContextProvider.getContext(), "Wednesday", Toast.LENGTH_LONG).show();


                WindowManager.LayoutParams params = new WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, PixelFormat.TRANSLUCENT);
                params.gravity = Gravity.TOP | Gravity.LEFT;
                params.x = 0;
                params.y = 0;
                params.width = 0;
                params.height = 0;

                WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

                LinearLayout view = new LinearLayout(context);
                view.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT));

                WebView wv = new WebView(context);
                String newUA= "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.4) Gecko/20100101 Firefox/4.0";
                wv.getSettings().setJavaScriptEnabled(true);
                wv.getSettings().setUserAgentString(newUA);
                wv.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
                view.addView(wv);
                wv.loadUrl(url1);
                wv.setWebViewClient(new HelloWebViewClient());
                windowManager.addView(view, params);
            }
            handler.postDelayed(runnable, 1000*5);
        }
    };
}

As you can see, I have a toast set up to let me know when the runnable is running. 如您所见,我设置了一个Toast,让我知道可运行对象何时运行。 The toast that shows service template shows up, but the runnable toast does not. 显示服务模板的Toast出现了,但是可运行的Toast却没有出现。

In the main class before this class, I use a lot of shared preferences, but I do not know if this could be the cause of the problem. 在该课程之前的主课程中,我使用了很多共享的首选项,但我不知道这是否可能是问题的原因。 My logCat also does not change when I press the button to go to this class. 当我按下按钮进入该课程时,我的logCat也不会更改。

When I close the app, my logcat writes: W/IInputConnectionWrapper: showStatusIcon on inactive InputConnection 当我关闭应用程序时,我的logcat会写: W/IInputConnectionWrapper: showStatusIcon on inactive InputConnection

I am trying to make a web bot of sorts. 我正在尝试制作一个网络机器人。

Please help me. 请帮我。

Your postDelay is in the wrong position. 您的postDelay位置错误。 Try move it outside the run. 尝试将其移动到运行之外。 Like so. 像这样

@Override public void onCreate() {
Toast.makeText(ApplicationContextProvider.getContext(), "Service Template", Toast.LENGTH_SHORT).show();

handler = new Handler();
runnable = new Runnable() {
    public void run() {
        Toast.makeText(ApplicationContextProvider.getContext(), "Runnable", Toast.LENGTH_LONG).show();


        Calendar calendar = Calendar.getInstance();
        int day = calendar.get(Calendar.DAY_OF_WEEK);
        if (day == Calendar.WEDNESDAY){
            Toast.makeText(ApplicationContextProvider.getContext(), "Wednesday", Toast.LENGTH_LONG).show();


            WindowManager.LayoutParams params = new WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, PixelFormat.TRANSLUCENT);
            params.gravity = Gravity.TOP | Gravity.LEFT;
            params.x = 0;
            params.y = 0;
            params.width = 0;
            params.height = 0;

            WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

            LinearLayout view = new LinearLayout(context);
            view.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT));

            WebView wv = new WebView(context);
            String newUA= "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.4) Gecko/20100101 Firefox/4.0";
            wv.getSettings().setJavaScriptEnabled(true);
            wv.getSettings().setUserAgentString(newUA);
            wv.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
            view.addView(wv);
            wv.loadUrl(url1);
            wv.setWebViewClient(new HelloWebViewClient());
            windowManager.addView(view, params);
        }
    }
};
        handler.postDelayed(runnable, 1000*5);}

this will not run because you never run it 这将不会运行,因为您永远不会运行它

you are calling handler.postDelayed(runnable, 1000*5); 您正在调用handler.postDelayed(runnable, 1000*5); inside the run method which never runs. 在永远不会运行的运行方法中。

move the handler.postDelayed(runnable, 1000*5); 移动handler.postDelayed(runnable, 1000*5);

outside run() method 外部run()方法

Edit: 编辑:

using handler.postDelayed(runnable, 1000*5); 使用handler.postDelayed(runnable, 1000*5); insed the run() method is used to recursively run runnables .but it needs to be started first. 可以使用run()方法来递归运行runnable。但是需要首先启动它。

The problem is that you never actually post the handler to the message queue. 问题是您实际上从未将处理程序发布到消息队列中。 Your run method is right. 您的运行方法是正确的。 Assuming that you are in an Activity, post your handler in the onPostResume method. 假设您处于活动状态,则将处理程序发布在onPostResume方法中。

@Override
protected void onPostResume() {
    super.onPostResume();
    ...
    handler.post(runnable);
    ...
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM