2016-10-25 2 views
0

Ich habe ein Fragment namens HomeFragment.java. Dies ist das erste Fragment, das gestartet wird, wenn meine App geöffnet wird. Innerhalb dieses Fragments habe ich eine Methode namens "onAsyncTaskDoInBackground", die alle Daten vom Server mit JSON abruft.Instanz in Android speichern Fragment

Was ich versuche zu tun ist "savedInstanceState", so dass jedes Mal, wenn "HomeFragment.java" wieder geöffnet wird, nicht alle Daten erneut herunterladen.

Beispiel:

Der Benutzer öffnet die App und die Homefragment.java gestartet wird, werden alle Daten heruntergeladen wird. Der Benutzer geht auf die Über uns-Seite und kehrt zur Homepage zurück (Homefragment, Java), alle Daten werden erneut heruntergeladen. (Es sollte nicht nötig sein, neu laden Sie alle Daten auf der gleichen App-Start)

HomeFragment.java

public class HomeFragment extends Fragment implements OnItemClickListener, OnClickListener, MainActivity.OnLocationListener { 

private View viewInflate; 
DisplayImageOptions options; 
ArrayList<Store> storeList; 
ArrayList<News> newsList; 
private ArrayList<News> arrayData; 
MGAsyncTask task; 
Queries q; 
private Store store; 
Random rand = new Random(); 


public HomeFragment() { } 

@SuppressLint("InflateParams") 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    viewInflate = inflater.inflate(R.layout.fragment_home, null); 
    return viewInflate; 


} 



@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
} 

@Override 
public void onDestroy() { 
    // TODO Auto-generated method stub 
    super.onDestroy(); 
    if(task != null) 
     task.cancel(true); 
} 



@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onViewCreated(view, savedInstanceState); 
    options = new DisplayImageOptions.Builder() 
      .showImageOnLoading(UIConfig.SLIDER_PLACEHOLDER) 
      .showImageForEmptyUri(UIConfig.SLIDER_PLACEHOLDER) 
      .showImageOnFail(UIConfig.SLIDER_PLACEHOLDER) 
      .cacheInMemory(true) 
      .cacheOnDisk(true) 
      .considerExifParams(true) 
      .bitmapConfig(Bitmap.Config.RGB_565) 
      .build(); 

    storeList = new ArrayList<Store>(); 
    newsList = new ArrayList<News>(); 

    MainActivity main = (MainActivity) getActivity(); 

    timer(); 
    main.showSwipeProgress(); 
    main.getDebugKey(); 


    q = main.getQueries(); 
    if(MGUtilities.isLocationEnabled(getActivity())) { 
     if(MainActivity.location == null) { 
      main.setOnLocationListener(this); 
     } 
     else { 
      Handler h = new Handler(); 
      h.postDelayed(new Runnable() { 

       @Override 
       public void run() { 
        getData(); 
        arrayData = q.getNews(); 
       } 
      }, Config.DELAY_SHOW_ANIMATION); 
     } 
    } 
    else { 
     main.setOnLocationListener(this); 
    } 
} 


public void getData() { 
    task = new MGAsyncTask(getActivity()); 

    task.setMGAsyncTaskListener(new OnMGAsyncTaskListener() { 

     @Override 
     public void onAsyncTaskProgressUpdate(MGAsyncTask asyncTask) { 

     } 

     @Override 
     public void onAsyncTaskPreExecute(MGAsyncTask asyncTask) { 
      asyncTask.dialog.hide(); 

     } 

     @Override 
     public void onAsyncTaskPostExecute(MGAsyncTask asyncTask) { 
      // TODO Auto-generated method stub 

      arrayData = q.getNews(); 
      if(!MGUtilities.hasConnection(getActivity())) { 
       ArrayList<Store> stores = q.getStoresFeatured(); 
       ArrayList<News> news = q.getNews(); 
       if (Config.HOME_STORE_FEATURED_COUNT != -1 && Config.RANK_STORES_ACCORDING_TO_NEARBY) { 
        Log.v("myApp", "STORE SLIDER THING - STORE SLIDER THING - STORE SLIDER THING - STORE SLIDER THING - STORE SLIDER THING - STORE SLIDER THING - "); 

        int storeCount = stores.size() < Config.HOME_STORE_FEATURED_COUNT ? 
          stores.size() : Config.HOME_STORE_FEATURED_COUNT; 

        if (MainActivity.location != null) { 
         for (Store store : stores) { 
          Location locStore = new Location("Store"); 
          locStore.setLatitude(store.getLat()); 
          locStore.setLongitude(store.getLon()); 
          double userDistanceFromStore = MainActivity.location.distanceTo(locStore)/1000; 
          store.setDistance(userDistanceFromStore); 
         } 

         Collections.sort(stores, new Comparator<Store>() { 
          @Override 
          public int compare(Store store, Store t1) { 
           if (store.getDistance() < t1.getDistance()) 
            return -1; 
           if (store.getDistance() > t1.getDistance()) 
            return 1; 
           return 0; 
          } 
         }); 
        } 
        storeList = new ArrayList<Store>(); 
        for (int x = 0; x < storeCount; x++) { 

         storeList.add(stores.get(x)); 

        } 
       } else { 
        storeList = stores; 
       } 

       if (Config.HOME_NEWS_COUNT != -1 && Config.RANK_STORES_ACCORDING_TO_NEARBY) { 
        Log.v("myApp", "NEWS SLIDER THING - NEWS SLIDER THING - NEWS SLIDER THING - NEWS SLIDER THING - NEWS SLIDER THING - NEWS SLIDER THING - "); 

        int newsCount = news.size() < Config.HOME_NEWS_COUNT ? news.size() : Config.HOME_NEWS_COUNT; 
        newsList = new ArrayList<News>(); 
        for (int x = 0; x < newsCount; x++) { 
         newsList.add(news.get(x)); 
        } 
       } else { 
        newsList = news; 
       } 
      } 

      MainActivity main = (MainActivity) getActivity(); 
      main.hideSwipeProgress(); 
     } 

     @Override 
     public void onAsyncTaskDoInBackground(MGAsyncTask asyncTask) { 
      // TODO Auto-generated method stub 


      if(MGUtilities.hasConnection(getActivity()) && MainActivity.location != null) { 
       try { 
        UserAccessSession accessSession = UserAccessSession.getInstance(getActivity()); 
        String strUrl = ""; 

        if(accessSession.getFilterDistance() == 0) { 
         Log.v("myApp", "STRURL - STRURL - STRURL - STRURL - STRURL - STRURL - STRURL - STRURL - STRURL - STRURL - "); 
         if(MGUtilities.hasConnection(getActivity())) { 

          try { 

           strUrl = String.format("%s?api_key=%s", 
             Config.GET_CATEGORIES_JSON_URL, 
             Config.API_KEY); 

           DataParser parser = new DataParser(); 
           Data data = parser.getData(strUrl); 

           MainActivity main = (MainActivity) getActivity(); 
           if (main == null) 
            return; 

           Queries q = main.getQueries(); 
           if (data == null) 
            return; 

           q.deleteTable("categories"); 
           if (data.getCategories() != null && data.getCategories().size() > 0) { 
            Log.v("myApp", "CATEGORYS - CATEGORYS - CATEGORYS - CATEGORYS - CATEGORYS - CATEGORYS - CATEGORYS - CATEGORYS - "); 

            for (Category cat : data.getCategories()) { 
             q.insertCategory(cat); 
            } 
           } 

          } catch (Exception e) { 
           e.printStackTrace(); 
          } 
         } 

         strUrl = String.format("%s?api_key=%s&lat=%f&lon=%f&radius=%f&news_count=%d&featured_count=%d&default_store_count_to_find_distance=%d", 
           Config.GET_HOME_STORES_NEWS_JSON_URL, 
           Config.API_KEY, 
           MainActivity.location.getLatitude(), 
           MainActivity.location.getLongitude(), 
           accessSession.getFilterDistance(), 
           Config.HOME_NEWS_COUNT, 
           Config.HOME_FEATURED_COUNT, 
           Config.DEFAULT_STORE_COUNT_TO_FIND_DISTANCE); 
        } 
        else { 

         strUrl = String.format("%s?api_key=%s&lat=%f&lon=%f&radius=%f&news_count=%d&default_store_count_to_find_distance=%d", 
           Config.GET_HOME_STORES_NEWS_JSON_URL, 
           Config.API_KEY, 
           MainActivity.location.getLatitude(), 
           MainActivity.location.getLongitude(), 
           accessSession.getFilterDistance(), 
           Config.HOME_NEWS_COUNT, 
           Config.DEFAULT_STORE_COUNT_TO_FIND_DISTANCE); 
        } 

        DataParser parser = new DataParser(); 
        Data data = parser.getData(strUrl); 
        MainActivity main = (MainActivity) getActivity(); 
        if (main == null) 
         return; 

        Queries q = main.getQueries(); 
        if (data == null) 
         return; 

        if(Config.AUTO_ADJUST_DISTANCE) { 
         if(data.getMax_distance() > 0) { 
          UserAccessSession.getInstance(getActivity()).setFilterDistanceMax(data.getMax_distance()); 
         } 

         if(UserAccessSession.getInstance(getActivity()).getFilterDistance() == 0) { 
          UserAccessSession.getInstance(getActivity()).setFilterDistance(data.getDefault_distance()); 
         } 
        } 



        if (data.getStores() != null && data.getStores().size() > 0) { 
         Log.v("myApp", "ENTERED THE IF - ENTERED THE IF - ENTERED THE IF - ENTERED THE IF - ENTERED THE IF"); 

         int storeCount = data.getStores().size() < Config.HOME_STORE_FEATURED_COUNT ? 
           data.getStores().size() : Config.HOME_STORE_FEATURED_COUNT; 

         int x = 0; 
         for (Store store : data.getStores()) { 
          Location locStore = new Location("Store"); 
          locStore.setLatitude(store.getLat()); 
          locStore.setLongitude(store.getLon()); 
          double userDistanceFromStore = MainActivity.location.distanceTo(locStore)/1000; 
          store.setDistance(userDistanceFromStore); 
          if (userDistanceFromStore < 50){ 
           Log.v("myApp", "STORE - STORE - STORE - STORE - STORE - STORE - STORE - STORE - STORE - STORE - STORE- STORE"); 
           q.deleteStore(store.getStore_id()); 
           q.insertStore(store); 


           if(x < storeCount) { 
            Log.v("myApp", "if(x < storeCount) - if(x < storeCount)- if(x < storeCount)- if(x < storeCount)- if(x < storeCount)- if(x < storeCount)"); 

            if (store.getFeatured() == 3) { 
             storeList.add(store); 
             x += 1; 

            } 


           } 

           if (store.getPhotos() != null && store.getPhotos().size() > 0) { 
            Log.v("myApp", "PHOTOS - PHOTOS - PHOTOS - PHOTOS - PHOTOS - PHOTOS - PHOTOS - PHOTOS - PHOTOS - PHOTOS - PHOTOS - PHOTOS - PHOTOS"); 
            for (Photo photo : store.getPhotos()) { 
             q.deletePhoto(photo.getPhoto_id()); 
             q.insertPhoto(photo); 
            } 
           } 
          }} 


         if (data.getNews() != null && data.getNews().size() > 0) { 
          Log.v("myApp", "NEWS - NEWS - NEWS - NEWS - NEWS - NEWS - NEWS - NEWS - NEWS - NEWS - NEWS - NEWS - NEWS - NEWS - NEWS - NEWS - NEWS - NEWS"); 
          int newsCount = data.getNews().size() < Config.HOME_NEWS_COUNT 
            ? data.getNews().size() : Config.HOME_NEWS_COUNT; 

          x = 0; 
          for (News news : data.getNews()) { 
           q.deleteNews(news.getNews_id()); 
           q.insertNews(news); 

           if(x < newsCount) { 
            newsList.add(news); 
            x += 1; 
           } 
          } 
         }} 

        try { 
         strUrl = ""; 
         strUrl = String.format("%s?api_key=%s", 
           Config.GET_NEWS_JSON_URL, 
           Config.API_KEY); 
         Log.v("myApp", "NEWS UPDATE - NEWS UPDATE - NEWS UPDATE - NEWS UPDATE - NEWS UPDATE - NEWS UPDATE - NEWS UPDATE "); 

         parser = new DataParser(); 
         data = parser.getData(strUrl); 
         main = (MainActivity) getActivity(); 
         if (main == null) 
          return; 


         if (data == null) 
          return; 

         q.deleteTable("news"); 
         if (data.getNews() != null && data.getNews().size() > 0) { 
          for (News news : data.getNews()) { 
           q.insertNews(news); 
          } 
         } 

        } catch (Exception e) { 
         e.printStackTrace(); 
        } 

       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    }); 
    task.execute(); 
} 

@Override 
public void onDestroyView() { 
    super.onDestroyView(); 
    if (viewInflate != null) { 
     ViewGroup parentViewGroup = (ViewGroup) viewInflate.getParent(); 
     if (parentViewGroup != null) { 
      MGSlider slider = (MGSlider) viewInflate.findViewById(R.id.slider); 
      slider.pauseSliderAnimation(); 
      parentViewGroup.removeAllViews(); 
     } 
    } 

    handler.removeCallbacks(runnable); 
    if(task != null) 
     task.cancel(true); 
} 
Handler handler = new Handler(); 
int apple = 0; 

Runnable runnable = new Runnable() { 
    public void run() { 
     if(apple < 5) { 
      timer(); 
     } 
    } 
}; 

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    MGSlider slider = (MGSlider) viewInflate.findViewById(R.id.slider); 
    slider.stopSliderAnimation(); 
    switch(v.getId()) { } 
} 

@Override 
public void onResume() { 
    // TODO Auto-generated method stub 
    super.onResume(); 
    MGSlider slider = (MGSlider) viewInflate.findViewById(R.id.slider); 
    slider.resumeSliderAnimation(); 
} 

@Override 
public void onPause() { 
    // TODO Auto-generated method stub 
    super.onPause(); 
    MGSlider slider = (MGSlider) viewInflate.findViewById(R.id.slider); 
    slider.pauseSliderAnimation(); 
} 

@Override 
public void onLocationChanged(Location prevLoc, Location currentLoc) { 
    MainActivity main = (MainActivity) getActivity(); 
    main.setOnLocationListener(null); 
    getData(); 
} 

} 
+0

Jedes Mal, wenn Ihr onViewCreated aufgerufen wird, beginnt das Laden von Daten. Also, Sie können eine einfache boolesche Flag dafür verwenden und zukünftige Datenlast verhindern – Sayem

+0

Danke, aber funktioniert nicht, es zeigte keinen Inhalt auf der Startseite –

Antwort

0

Sie, dass wie unten tun können.

private View viewFragment; 
private ArrayList<MyClass> list = new ArrayList<>(); 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    viewFragment = inflater.inflate(R.layout.fragment_layout, container, false); 
    initIds(); 

    if (savedInstanceState == null) { 
     // get all data and saved in list. 
    } else { 
     // use saved list or other data here... 
     list = savedInstanceState.getParcelableArrayList("arraylist"); 
     setListAdapter(list); 
    } 

    return viewFragment; 
} 

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putParcelableArrayList("arraylist", list); 
} 
+0

Ich habe versucht, diesen Code hinzuzufügen, aber immer mehrere Fehler erhalten. –

+0

getParcelableArrayList funktioniert nicht für mich –

+0

@QuickyApp make 'MyClass implementiert Parcelable' wird es funktionieren –