获取类实例和覆盖方法

时间:2018-05-09 12:17:30

标签: java android

我想覆盖不同类的doInBackground()方法中的ListenerClass overriden方法,以便在单独的线程中跟踪位置更改。

我有ListenerClass

public class ListenerClass implements LocationListener {

@Override
public void onLocationChanged(Location location) {

}

@Override
public void onStatusChanged(String s, int i, Bundle bundle) {

}

@Override
public void onProviderEnabled(String s) {

}

@Override
public void onProviderDisabled(String s) {

}

}

我在这里实例化它是为了requestLocationUpdates(),因为它不能为null以便调用该方法。

class AsyncClass extends AsyncTask<Void, String, Void> {

    private LocationManager locationManager;
    private String provider;
    private Criteria criteria;
    private TextView textView;
    private ListenerClass listenerClass;

    public AsyncClass(TextView textView) {
        this.textView = textView;
    }

    @SuppressLint("MissingPermission")
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        listenerClass = new ListenerClass();
        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        criteria = new Criteria();
        criteria.setPowerRequirement(Criteria.POWER_HIGH);
        criteria.setAccuracy(Criteria.ACCURACY_FINE);
        provider = locationManager.getBestProvider(criteria, true);
        locationManager.requestLocationUpdates(provider, 1000, 10, listenerClass);
    }

最后,我想在单独的线程中覆盖位置监听器的方法。

    @Override
    protected Void doInBackground(Void... voids) {
        Looper.prepare();
        listenerClass.getClass();//What shall i do here?

        Looper.loop();
        return null;
    }

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

您可以覆盖,但需要创建新实例。

 @Override
    protected Void doInBackground(Void... voids) {
        Looper.prepare();
        listenerClass = new LocationListener() {
        // Other overrided methods....
          @Override
          public void onLocationChanged(Location location) {

          }

          @Override
          public void onStatusChanged(String s, int i, Bundle bundle) {

          }

          @Override
          public void onProviderEnabled(String s) {

          }

          @Override
          public void onProviderDisabled(String s) {

          }

          }

        Looper.loop();
        return null;
    }

答案 1 :(得分:0)

您可以覆盖任何侦听器类的方法,但是您不会收到位置更新,因为此新实例未向位置管理器注册

@Override
        protected Void doInBackground(Void... voids) {
            Looper.prepare();
            ....
              new ListenerClass(){
                @Override
                public boolean onProviderEnabled(Location location) {
                  ....
                }
            };

            .....

        Looper.loop();
        return null;
    }