我從一個巨大的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).
我想我理解它,所以我創建一個頂對象,包含三個對象:
- 與明文數據
- 與兩個URL(串)的對象的第一列表對象它
- 其中包含兩個字符串和兩個日期對象的第二個對象列表。
實際上額外的水平感覺有點不必要,我希望這兩個列表對象是普通數據對象的子對象。 任何人都知道我需要改變什麼?
我的課:
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); //
}
我甚至沒有開始使其可比性,所以不介意。但最終我會在名單和主題等項目上列出我的名單。
不,我沒有,現在我把它們放在他們自己的班裏。感謝你幫助我。現在它在運行之前不會導致錯誤,但是現在當我添加新圖片時,即使它在此行上爲空時,我也有一個nullpointerexception:tempSv.photos.add(new SimplePhotos());你知道爲什麼嗎? (其中tempsv = simplevenue項目(就像我之前的文章中的simplevenuedata)) – Jasper 2012-07-27 11:59:35
@Jasper:你的文章包含了太多的代碼,我現在就去查看它。我建議你爲此提出一個單獨的問題,把它縮減爲一個簡短但完整的程序,顯示*只是讓你困惑的那一點。我懷疑,通過這個例子,你會發現什麼是錯的。 – 2012-07-27 12:38:02