onRestart()和onRefresh()使用相同的代码不同

时间:2016-01-07 17:49:27

标签: android location oncreate

我有完全相同的方法并在onRefresh()和onRestart()中调用,但由于某种原因onRestart()完成了我想要的,但onRefresh()的行为却不同。我想要发生的是让应用程序了解何时在运行时禁用该位置。

onRestart()执行此操作:启动应用程序,获取预测数据,从状态栏禁用位置,按主页按钮再次打开应用程序。正如预期的那样,onRestart()尝试检查GPS状态(使用gpsTracker.getIsGPSEnabled()),看到该位置被禁用,并发送相应的Toast消息。

onRefresh()执行此操作:启动应用程序,获取预测数据,从状态栏禁用位置,甚至等待几秒钟,然后刷新应用程序。出乎意料的是,onRefresh()会发送“Data Refreshed”toast,即使它获得“null,null”作为位置纬度和经度。

我也可以提供其他代码,但如果其余代码出现问题,为什么onRestart()会按照我想要的方式运行?我没有收到任何错误。任何帮助将受到高度赞赏。感谢。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ButterKnife.bind(this);
    final GPSTracker gpsTracker = new GPSTracker(this);


    mSwipeRefreshLayout.setColorSchemeColors(Color.RED, Color.GREEN, Color.BLUE, Color.CYAN);
    mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    mSwipeRefreshLayout.setRefreshing(false);
                    if (gpsTracker.getIsGPSTrackingEnabled()) {
                        gpsTracker.getLocation();
                        getForecast(gpsTracker);
                        Toast.makeText(MainActivity.this, "Data Refreshed", Toast.LENGTH_SHORT).show();
                    } else {
                        Toast.makeText(MainActivity.this, "Location is not enabled", Toast.LENGTH_LONG).show();
                    }
                }
            }, 3000);
        }
    });
}

@Override
protected void onRestart() {
    super.onRestart();
    final GPSTracker gpsTracker = new GPSTracker(this);
    new Handler().postDelayed (new Runnable ()
       @Override public void run() {
            gpsTracker.getLocation();
            if (gpsTracker.getIsGPSTrackingEnabled()) {
                getForecast(gpsTracker);
                Toast.makeText(MainActivity.this, "Data Refreshed", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(MainActivity.this, "Location is not enabled", Toast.LENGTH_LONG).show();
            }
        }
}, 3000);
}

2 个答案:

答案 0 :(得分:1)

onRestart您创建了一个新的GPSTracker实例。尝试更新onRefresh中的GPSTracker处理程序。 试一试

答案 1 :(得分:1)

            @Override
            public void onRefresh() {
            final GPSTracker gpsTracker = new GPSTracker(MainActivity.this);
            new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                mSwipeRefreshLayout.setRefreshing(false);
                if (gpsTracker.getIsGPSTrackingEnabled()) {
                    gpsTracker.getLocation();
                    getForecast(gpsTracker);
                    Toast.makeText(MainActivity.this, "Data Refreshed", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(MainActivity.this, "Location is not enabled", Toast.LENGTH_LONG).show();
                }
            }
        }, 3000);
    }
});