быстро вопрос, кто-то может мне помочь, пожалуйста? Я просто хочу знать, правильно ли реализовала моя реализация Asynctask. Я новичок в разработке шаблонов MVP Clean Architecure, и я не уверен, что это хороший способ сделать это.
По сути, у меня есть метод в моем классе Interactor, и здесь я вызвал свой Asynctask, и колбэк возвращает данные, затем я использую интерфейс для возврата данных своему докладчику, а затем обновляю представление. Я надеюсь, что кто-то может мне помочь, пожалуйста.
Кстати, на самом деле это работает нормально, но очень медленно
public class MapPresenterImpl implements MapPresenter,MapInteractorImpl.onDataChanged{
private MapView view;
private MapInteractor interactor;
public MapPresenterImpl(MapView view) {
this.view = view;
this.interactor = new MapInteractorImpl(this);
}
@Override
public void setInfo(LocationManager manager,Context mContext) {
if (view != null) {
view.showProgress(true);
interactor.getCurrentInfMaps(manager,mContext);
}
}
@Override
public void notifyPresenterDataChanged(Location location) {
view.showProgress(false);
if (null != location){
view.setInfo(location);
}
}
@Override
public void notifyPresenterGpsDisabled(boolean isDisabledGps) {
if (isDisabledGps){
view.showProgress(false);
view.showMessage("The gps is disabled please enable first");
}
}
}
public class MapInteractorImpl implements MapInteractor,GpsProvider.listener{
private final String TAG = getClass().getSimpleName();
private onDataChanged listener;
public MapInteractorImpl(onDataChanged listener){
this.listener = listener;
}
@Override
public void getCurrentInfMaps(LocationManager manager, Context context) {
new GpsProvider(manager,context,this);
}
@Override
public void dataChanged(Location location) {
if (location!=null){
listener.notifyPresenterDataChanged(location);
Log.i("MapInteractorImpl() ",String.format("Lat: %s, Long: %s",String.valueOf(location.getLatitude()),String.valueOf(location.getLongitude())));
} else{
listener.notifyPresenterGpsDisabled(true);
}
}
public interface onDataChanged{
void notifyPresenterDataChanged(Location location);
void notifyPresenterGpsDisabled(boolean isDisabledGps);
}
}
public class GpsProvider implements android.location.LocationListener{
private LocationManager manager;
private Context context;
private listener listener;
public GpsProvider(LocationManager manager,Context context,listener listener){
this.manager = manager;
this.context = context;
this.listener = listener;
init();
}
public interface listener{
void dataChanged(Location location);
}
private final String TAG = getClass().getSimpleName();
@Override
public void onLocationChanged(Location location) {
if (location!=null){
Log.i(TAG,String.format("Lat: %s, Long: %s",String.valueOf(location.getLatitude()),String.valueOf(location.getLongitude())));
listener.dataChanged(location);
} else{
Log.i(TAG,"Location is null");
}
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
Log.i(TAG,"CurrentProvider enable: "+provider);
}
@Override
public void onProviderDisabled(String provider) {
Log.i(TAG,"CurrentProvider disable: "+provider);
}
@SuppressLint("MissingPermission")
public void init(){
manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
if (isGpsEnabled()){
manager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
2000,
10, this);
} else{
Log.i(TAG,"The gps is disabled");
listener.dataChanged(null);
}
}
public boolean isGpsEnabled(){
if (manager.isProviderEnabled(LocationManager.GPS_PROVIDER))
return true;
return false;
}
}
Это мой SampleMVP в GitHub!
https://github.com/DjangoLC/SampleMvp
если у вас будет немного свободного времени, я буду благодарен!