有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从Runnable中调用新活动

我在andoid中需要处理一个流:

假设我在活动1中,然后有一个API说https://status.com/key,它告诉我是需要导航到活动2还是停留在活动1本身

因此,在Activity-1中,我将HttpRequest调用放在可运行线程中,并在每秒钟之后持续ping该API以了解其响应。当我得到回答“是”时,我就导航到活动2(谷歌地图活动)

但我注意到的是,即使在导航到Activity-2之后,Activity-1中的可运行线程仍在持续运行,因此Activity-2(Google maps活动)不断以不希望的方式加载。如何停止活动1中的可运行线程:

  1. Tried Thread.stop() // Not working
  2. System.exit(0) //is a bad option
final Runnable r = new Runnable() {
            public void run() {
                String myUrl="https://app.herokuapp.com/users/userredirection-pickup/"+ridetrackingno;
                Log.d("URL",myUrl);
                HttpGetRequest getRequest = new HttpGetRequest();
                try{
                    String result = getRequest.execute(myUrl).get();
                    JSONArray j=new JSONArray(result);
                    JSONObject jo= j.getJSONObject(0);
                    String r=jo.getString("status");
                    if(r.equals("yes")){
                        Intent show = new Intent (getApplicationContext(), Riding.class);
                        show.putExtra("Username",username);
                        show.putExtra("Phone",phone);

                        startActivity(show);
                    }
                } catch(Exception e)
                {
                    e.printStackTrace();
                }
                handler.postDelayed(this, 2000);
            }
        };

        handler.postDelayed(r, 2000);

请帮忙。谢谢


共 (2) 个答案

  1. # 1 楼答案

    试试这个。也许它会起作用

    final Runnable r = new Runnable() {
                public void run() {
                    String myUrl="https://app.herokuapp.com/users/userredirection-pickup/"+ridetrackingno;
                    Log.d("URL",myUrl);
                    HttpGetRequest getRequest = new HttpGetRequest();
                    try{
                        String result = getRequest.execute(myUrl).get();
                        JSONArray j=new JSONArray(result);
                        JSONObject jo= j.getJSONObject(0);
                        String r=jo.getString("status");
                        if(r.equals("yes")){
                            try {
                                 runOnUiThread(new Runnable() {
    
                                 @Override
                                 public void run() {
                                     Intent show = new Intent (getApplicationContext(), Riding.class);
                                     show.putExtra("Username",username);
                                     show.putExtra("Phone",phone);
    
                                     startActivity(show);
                        }
                    });
                    Thread.sleep(300);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
    
                        }
                    } catch(Exception e)
                    {
                        e.printStackTrace();
                    }
                    handler.postDelayed(this, 2000);
                }
            };
    
            handler.postDelayed(r, 2000);
    
  2. # 2 楼答案

    我刚才说的是

    if(r.equals("yes")){
        Intent show = new Intent (getApplicationContext(), Riding.class);
        show.putExtra("Username",username);
        show.putExtra("Phone",phone);
    
        startActivity(show);
    } else {
        handler.postDelayed(this, 2000);
    }