Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 自定义对象中(子)对象的NPE填充列表_Java_Android_List_Nullpointerexception - Fatal编程技术网

Java 自定义对象中(子)对象的NPE填充列表

Java 自定义对象中(子)对象的NPE填充列表,java,android,list,nullpointerexception,Java,Android,List,Nullpointerexception,我试图将一些数据放入自定义对象列表中。我的主要自定义对象中的一项是照片列表,其中包含两个字符串。但每次我尝试添加照片项目时,我都会得到一个nullpointerexception 我的代码: @Override protected String doInBackground(Void... params) { String language = Locale.getDefault().getISO3Language(); AssetManager assetManager =

我试图将一些数据放入自定义对象列表中。我的主要自定义对象中的一项是照片列表,其中包含两个字符串。但每次我尝试添加照片项目时,我都会得到一个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;
}
我不知道为什么这不起作用。我是在一个异步后台做这一切的,这可能与此有关吗? 或者我只是犯了一些我找不到的愚蠢的错误。我以前在objectslist中使用过objectslist,但从未遇到过这个问题。我的错误在线上

tempSv.photos.add(新的SimplePhotos(大、中))


您尚未显示完整声明,但是您似乎并未初始化
SimpleVenue
类中的
photos
列表。您需要将实现
列表
接口的类的实例分配给此字段。例如:

public List<SimplePhotos> photos = new ArrayList<SimplePhotos>();
public List photos=new ArrayList();

您尚未显示完整声明,但是您似乎并未初始化
simplevue
类中的
photos
列表。您需要将实现
列表
接口的类的实例分配给此字段。例如:

public List<SimplePhotos> photos = new ArrayList<SimplePhotos>();
public List photos=new ArrayList();

似乎tempSv.photos为空(尚未初始化(可能希望在构造函数中使用此项))

似乎tempSv.photos为空(尚未初始化(可能希望在构造函数中使用此项))

您从未初始化tempSv的照片列表。您必须添加tempSv.photos=newArrayList()之类的内容

您从未初始化tempSv的照片列表。您必须添加tempSv.photos=newArrayList()之类的内容

你能发布堆栈跟踪吗?您还可以在尝试设置之前在行上创建SimplePhotos,然后测试它是否为null。您可以发布堆栈跟踪吗?您也可以在尝试设置SimplePhotos之前在行上创建SimplePhotos,然后测试它是否为null;这还不够吗?@japser不,这只是声明了一个可以保存列表引用的字段。默认情况下,字段被初始化为null,这就是为什么在尝试调用NPE上的add()方法时会得到NPE。在调用add()方法之前,您需要分配字段以引用实际对象。Russel谢谢,我按照您的建议做了,它工作得很好。但是在SimpleVue类中,我已经有了:public List photos;这还不够吗?@japser不,这只是声明了一个可以保存列表引用的字段。默认情况下,字段被初始化为null,这就是为什么在尝试调用NPE上的add()方法时会得到NPE。在调用add()方法之前,您需要指定字段以引用实际对象。谢谢,我按照您的建议做了,它工作得非常好。
public List<SimplePhotos> photos = new ArrayList<SimplePhotos>();