0

カスタム オブジェクトのリストにデータを入れようとしています。私のメイン カスタム オブジェクトの項目の 1 つは、2 つの文字列を含む写真のリストです。しかし、写真アイテムを追加しようとするたびに、nullpointerexception が発生します...

私のコード:

@Override
protected String doInBackground(Void... params) {
    String language =  Locale.getDefault().getISO3Language();
    AssetManager assetManager = getAssets();
    InputStream inputStream = null;
    try {
        inputStream = assetManager.open("MyJson.json");
    } catch (IOException e) {
        Log.e("tag", e.getMessage());
    }
    ObjectMapper objectMapper = new ObjectMapper();
    Log.i("tijdlog","start parsing" );
    try {

        List<JJsonResponse> jsonResponse = objectMapper.readValue(inputStream, new TypeReference<List<JJsonResponse>>() { });
        Log.i("tijdlog","ended json parsing" );
        final List<JJsonResponse> myGlobalVariable = jsonResponse;

        //Simple Venues maken, rest weggooien!
        List<SimpleVenue> sv = new ArrayList<SimpleVenue>();
        JJsonResponse e;
        int k =0; //indicator 1e SimpleVenue
        JVenueThemes jtheme;
        SimpleVenue tempSv;
        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);
                        tempSv.setId(k);
                        tempSv.setName(e.venue.name);
                        tempSv.setAdress(e.venue.address);
                        tempSv.setCity(e.venue.city);
                        tempSv.setPhone(e.venue.phone);
                        tempSv.setWebsite(e.venue.website);
                        tempSv.setFoursquare(e.venue.foursquare_link);
                        tempSv.setLatitude(e.venue.latitude);
                        tempSv.setLongitude(e.venue.longitude);
                        tempSv.setCategory(jtheme.icon);
                        tempSv.setIcon(jtheme.icon);
                        // language depending
                        if (language.equalsIgnoreCase("nld")){ //dutch
                            tempSv.setTip(e.venue.tip); 
                            tempSv.setTheme(jtheme.name); 
                        } else { //english
                             tempSv.setTip(e.venue.tip_en); 
                             tempSv.setTheme(jtheme.name_en); 
                        }
                        // put two (useless) photos items
                        for (int m = 0; m<2;m++) {
                            String large="pic1";
                            String medium="pic1";
                            tempSv.photos.add(new SimplePhotos(large,medium));                                    
                            k++;
                        }    
                    }
                }
            jsonResponse.remove(i); // 
            }
        }
    } catch (JsonParseException e) {
        // XXX Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // XXX Auto-generated catch block
        e.printStackTrace();
    }
    return language;
}

シンプル会場:

public class SimpleVenue implements Serializable, Comparable<SimpleVenue>{
        /**
         * 
         */
    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;
    public List<SimplePhotos> photos;

シンプルフォト;

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


    public SimplePhotos(String vmedium,String vlarge){
        medium = vmedium;
        large = vlarge;
    }

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

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

    public String getMedium(){
        return medium;
    }

    public String getLarge(){
        return large;
    }

なぜこれが機能しないのかわかりません。私はバックグラウンドでAsyncTast doでこれをすべてやっていますが、それと関係があるのでしょうか? それとも、私が見つけられない愚かな間違いを犯しているだけですか。以前に objectslist で objectslists を使用していましたが、この問題は一度もありませんでした。私のエラーは行にあります

tempSv.photos.add(新しい SimplePhotos(大、中));

4

3 に答える 3

2

完全な宣言は表示されていませんが、クラスphotos内でリストを初期化しているようには見えません。このフィールドへのインターフェースをSimpleVenue実装するクラスのインスタンスを割り当てる必要があります。List例えば:

public List<SimplePhotos> photos = new ArrayList<SimplePhotos>();
于 2012-07-27T12:35:04.707 に答える
1

tempSv.photosがnullのように見えます(まだ初期化されていません(おそらくコンストラクターでこれが必要です))

于 2012-07-27T12:36:07.263 に答える
0

tempSv の写真リストを初期化することはありません。tempSv .photos = new ArrayList(); のようなものを追加する必要があります。

于 2012-07-27T12:40:03.133 に答える