2012-07-27 40 views
0

我從一個巨大的Jsonfile創建了一個非常簡單的自定義對象列表。這個簡單的列表包含了原始解析的JSON的大約1/8到1/10(大約400 kb左右,完整版是3mb),我可以扔掉它。我只使用我在這個列表中需要的數據,所以如果支持兩種語言,在我的簡單列表中,我只列出了我需要的數據。這個列表我序列化,所以我不需要在啓動時分析所有的數據。沒有封閉式的錯誤:它是如何工作的

該對象應該包含一些純數據和兩個帶有視圖自定義對象的列表。但我試圖填補這些子列表時,我的問題發生。該錯誤是No enclosing instance of type SimpleVenue is accessible. Must qualify the allocation with an enclosing instance of type SimpleVenue (e.g. x.new A() where x is an instance of SimpleVenue).

我想我理解它,所以我創建一個頂對象,包含三個對象:

  1. 與明文數據
  2. 與兩個URL(串)的對象的第一列表對象它
  3. 其中包含兩個字符串和兩個日期對象的第二個對象列表。

實際上額外的水平感覺有點不必要,我希望這兩個列表對象是普通數據對象的子對象。 任何人都知道我需要改變什麼?

我的課:

import java.io.Serializable; 
import java.util.Date; 
import java.util.List; 


public class SimpleVenue implements Serializable, Comparable<SimpleVenue>{ 
    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 
    public SimpleVenueData simplevenuedata; 
    public List <SimplePhotos> simplephotos; 
     public List <SimpleOpeningHours> openinghours; 

    public class SimpleVenueData implements Serializable{ 
     /** 
     * 
     */ 
    private static final long serialVersionUID = 1L; 
    public int ID; 
    public String name; 
    public String category; 
    public String address; 
    public String city; 
    public String tip; 
    public String phone; 
    public String website; 
    public String foursquare; 
    public float latitude; 
    public float longtitude; 
    public String theme; 
    public String icon; 
    public String exception; 


     //setters 

public void setId(int id){ 
    ID=id; 
} 
public void setName(String vname){ 
name=vname; 
}  
public void setCategory(String icon){ 
    if(icon.equals("eten.png") || icon.equals("uitgaan.png")){ 
     category="food"; 
    }else if(icon.equals("monument.png")){ 
     category="sights"; 
    }else if(icon.equals("winkelen.png")){ 
     category="shops"; 
    } 
}  
public void setAdress(String vaddress){ 
address = vaddress; 
}  

public void setCity(String vcity){ 
    city=vcity; 
    } 

public void setTip(String vtip){ 
    tip=vtip; 
    } 
public void setPhone(String vphone){ 
    phone=vphone; 
    } 
public void setWebsite(String vwebsite){ 
    website=vwebsite; 
    } 

public void setFoursquare(String vfoursquare_link){ 
    foursquare=vfoursquare_link; 
    } 
public void setLatitude(float vlatitude){ 
    latitude=vlatitude; 
    } 

public void setLongitude(float vlong){ 
    longtitude=vlong; 
    } 

public void setTheme(String vtheme){ 
    theme=vtheme; 
    } 

public void setIcon(String vicon){ 
    icon=vicon; 
    } 
public void setException(String vexception){ 
    exception = vexception; 
    } 

} 

    public class SimplePhotos implements Serializable{ 
     /** 
     * 
     */ 
     private static final long serialVersionUID = 1L; 
     public String medium; 
     public String large; 

     public void setMedium(String vmedium){ 
      medium=vmedium; 
      } 

     public void setLarge(String vlarge){ 
      large=vlarge; 
      } 
     public String getMedium(){ 
      return medium; 
     } 

     public String getLarge(){ 
      return large; 
     } 

    } 

    public class SimpleOpeningHours implements Serializable{ 
     /** 
     * 
     */ 
     private static final long serialVersionUID = 1L; 
     public String day; 
     public boolean closed; 
     public Date starttime; 
     public Date endtime; 

     //setters 
     public void setDay(String vday){ 
      day=vday; 
     } 

     public void setClosed(boolean vclosed){ 
      closed=vclosed; 
      } 

     public void setStartime(Date vstarttime){ 
      starttime=vstarttime; 
      } 
     public void setEndime(Date vendtime){ 
      endtime=vendtime; 
      } 

     //getters 
     public String getDay(){ 
      return day; 
     } 
     public boolean isClose(){ 
      return closed; 
     } 
     public Date getStarttime(){ 
      return starttime; 
     } 
     public Date getEndtime(){ 
      return endtime; 
     } 


    } 


    @Override 
    public int compareTo(SimpleVenue another) { 
     // XXX Auto-generated method stub 
     return 0; 
    } 
} 

時使用:

List<SimpleVenue> sv = new ArrayList<SimpleVenue>(); 
           int selectedPic; 
           JJsonResponse e; 
           int k =0; //indicator 1e SimpleVenue 
           JVenueThemes jtheme; 
           SimpleVenue tempSv; 
           SimpleVenueData tempSvd; 
           SimplePhotos tempPhoto; 
           int selectedCounter; 

           for(int i=0;i < jsonResponse.size() ;i++){ 
            e = jsonResponse.get(i); 
            if(e.venue.hidden == false){ //staat aan 
             for(int j=0; j<e.venue.themes.size();j++){ //loop door alle themes 
             if (e.venue.themes.get(j).mobile == true){ //als theme is true 
              jtheme = e.venue.themes.get(j); 
              sv.add(new SimpleVenue()); 
              tempSv=sv.get(k); 
              tempSvd=sv.get(k).simplevenuedata; 
              tempSvd.setId(k); 
              tempSvd.setName(e.venue.name); 
              tempSvd.setAdress(e.venue.address); 
              tempSvd.setCity(e.venue.city); 
              tempSvd.setPhone(e.venue.phone); 
              tempSvd.setWebsite(e.venue.website); 
              tempSvd.setFoursquare(e.venue.foursquare_link); 
              tempSvd.setLatitude(e.venue.latitude); 
              tempSvd.setLongitude(e.venue.longitude); 
              tempSvd.setCategory(jtheme.icon); 
              tempSvd.setIcon(jtheme.icon); 
              // language depending 
             if (language.equalsIgnoreCase("nld")){ //dutch 
               tempSvd.setTip(e.venue.tip); 
               tempSvd.setTheme(jtheme.name); 
              }else{ //english 
               tempSvd.setTip(e.venue.tip_en); 
               tempSvd.setTheme(jtheme.name_en); 
              } 
             // selecting pics 
              if (e.venue.venue_photos.isEmpty() == false){ 
               for(int l=0; l < e.venue.venue_photos.size() ;l++){ 
                selectedCounter=0; 
                if(e.venue.venue_photos.get(l).selected == true){ 
                 sv.get(k).simplephotos.add(new SimplePhotos()); 
//              tempSv.simplephotos.add(new SimplePhotos()); 
//              tempSv.simplephotos.get(selectedCounter).large=e.venue.venue_photos.get(selectedCounter).large; 
//              tempSv.simplephotos.get(selectedCounter).medium=e.venue.venue_photos.get(selectedCounter).medium; 
//              selectedCounter++; 
                } 
               } 
              }else{ 
               tempSv.simplephotos.add(new SimpleVenue.SimplePhotos()); 

               tempSv.simplephotos.get(0).large=null; 
               tempSv.simplephotos.get(0).medium=null; 
               } 

              // selecting opening hours 
              //testrun before entering opening hours 
              Log.i("testrun", "k= " + String.valueOf(k)); 





              k++; 
             } 
            } 
            } 
            jsonResponse.remove(i); // 
           } 

我甚至沒有開始使其可比性,所以不介意。但最終我會在名單和主題等項目上列出我的名單。

回答

0

需要SimpleVenueData有一個外部類的實例的引用嗎?如果沒有,只需將其設爲靜態嵌套類。 (或者全部拉出所有這些嵌套類......)

+0

不,我沒有,現在我把它們放在他們自己的班裏。感謝你幫助我。現在它在運行之前不會導致錯誤,但是現在當我添加新圖片時,即使它在此行上爲空時,我也有一個nullpointerexception:tempSv.photos.add(new SimplePhotos());你知道爲什麼嗎? (其中tempsv = simplevenue項目(就像我之前的文章中的simplevenuedata)) – Jasper 2012-07-27 11:59:35

+0

@Jasper:你的文章包含了太多的代碼,我現在就去查看它。我建議你爲此提出一個單獨的問題,把它縮減爲一個簡短但完整的程序,顯示*只是讓你困惑的那一點。我懷疑,通過這個例子,你會發現什麼是錯的。 – 2012-07-27 12:38:02

相關問題