2015-05-06 4 views
1

У меня есть приложение с навигационным ящиком и некоторыми фрагментами.Переменная перехода от Activity to AsynTask

В моем MainActivity я получаю фактическое lat & long Расположение устройства.

На моем первом фрагменте в ящике я загрузить в AsyncTask некоторые вещи из моей базы данных на моем веб-сервере

Для этого запроса мне нужно мои Lat & Длинные переменные из MainActivity.

Но как я могу вызвать метод getLag() из MainActivity из моей AsyncTask или получить мои 2 переменные?

мне нужно переменные в Methode updateJSONdata, который называется в doInBackround()

public class LoadEvents extends AsyncTask<Void, Void, Boolean>{ 

     Activity activity; 
     ListFragment LF; 
     String TAG; 

     public LoadEvents(Activity A, ListFragment lf, String TAG) { 

      this.TAG = TAG; 
      this.LF = lf; 
      this.activity = A; 
     } 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 


      MySwipeRefreshLayout srl = (MySwipeRefreshLayout) LF.getView().findViewById(R.id.srl); 

      if(srl!=null){ 
       srl.setRefreshing(true); 
      } 

     } 

     @Override 
     protected Boolean doInBackground(Void... arg0) { 

      updateJSONdata(TAG, activity); 




      return null; 

     } 
+0

Как вы хранить ваши широты/долготы? Объект «LatLng»? –

+0

Вы можете передать как новый 'LoadEvents(). Execute (" pass here ");' right? –

ответ

0

Фрагмент onAttach()

MainActivity mainActivity; 

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    mainActivity = (MainActivity) activity;    
} 

Вызов метода активности, как это в вашем фрагменте

if (mainActivity != null) 
    latLng = mainActivity.getLatLng(); //getLatLng() is a method defined in MainActivity 

Happy_Coding ... :)

+0

Я пробовал это, но я всегда geht ошибка 'Caused by: java.lang.NullPointerException: попытка вызвать виртуальный метод 'double [] paketname.getLatLng()' в ссылке нулевого объекта ' – Stevetro

+0

моя ошибка, не инициализировала arraylist ;-) – Stevetro

0

1 - Вызов функции фрагмент из MainActivity

public class LoadEvents extends AsyncTask<Void, LatLng, Boolean>{ 
//.... 
    @Override 
     protected Boolean doInBackground(LatLng... arg0) { 
      LatLng myLatLng = arg0[0]; 

      updateJSONdata(TAG, activity); 
      return null; 

     } 
} 

Существует метод в Fragment

public void processAsync(LatLng latlng){ 
    new LoadEvents().execute(LatLng latlng); 
} 

вызове метода из MainActivity

myfragment.processAsync(myLatLng); 


2 - Передайте ваш LatLng параметра к вашему фрагменту

  • Пройди свой LatLng параметр для вашего фрагмента в качестве Json строки Bundle
  • Получить объект LatLng снова
  • Вызов processAsync(myLatLng);
Смежные вопросы