巨大な Jsonfile からカスタム オブジェクトの非常に単純なリストを作成しています。この単純なリストには、元の解析済み JSON の約 1/8 から 1/10 が含まれています (つまり、400 kb 程度、フル バージョンは 3mb です)。これは破棄できます。このリストで必要なデータのみを使用するので、2 つの言語がサポートされている場合は、単純なリストに必要な 1 つだけを入れます。このリストはシリアル化するので、起動時に常にすべてのデータを解析する必要はありません。
オブジェクトには、いくつかのプレーン データと、ビュー カスタム オブジェクトを含む 2 つのリストが含まれている必要があります。しかし、これらのサブリストを埋めようとすると問題が発生します。エラーは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).
私はそれを理解したと思ったので、3 つのオブジェクトを含むトップ オブジェクトを作成しました。
- プレーンデータを持つオブジェクト
- 2 つの URL (文字列) を含むオブジェクトの最初のリスト
- 2 つの文字列と 2 つの日付オブジェクトを含むオブジェクトの 2 番目のリスト。
余分なレベルは実際には少し不必要に感じます.2つのリストオブジェクトをプレーンデータオブジェクトの子にしたかったのです. 誰が私が何を変更する必要があるか知っていますか?
私のクラス:
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); //
}
私はそれを比較することすら始めていないので、気にしないでください。しかし、最終的には、名前やテーマなどのいくつかのアイテムでリストを注文します.