无法将值分配给对象的数组

时间:2014-07-23 19:15:21

标签: java android

我创建了一个自定义对象数组来存储值。

mNearbyPlaceMini[] mn = new mNearbyPlaceMini[googlePlacesObj.results.size()];
for (int i = 0; i < googlePlacesObj.results.size(); i++) {
    mGooglePlaces.place place = googlePlacesObj.results.get(i);
    Bitmap placeImageBitmap = null;
    try {
        URL imageUrl = new URL(place.icon);
        placeImageBitmap = BitmapFactory.decodeStream(imageUrl.openConnection().getInputStream());
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    mn[i].placePicture = placeImageBitmap; //ERROR HERE
    mn[i].placeName = place.name;
    ...
}

但是当我尝试为像mn[i].placePicture = placeImageBitmap这样的对象的属性赋值时,它会给我java.lang.NullPointerException错误。 placeImageBitmap具有有效值且不为null,因此我对我的对象数组一定是错误的。

public class mNearbyPlaceMini {
    public Bitmap placePicture;
    public String placeName;
    public Double latitude;
    public Double longitude;
    public mNearbyPlaceMini(){}
}

2 个答案:

答案 0 :(得分:1)

您永远不会将对象分配给mn[i],因此它为空。

您使用mNearbyPlaceMini[] mn = new mNearbyPlaceMini[googlePlacesObj.results.size()];创建一个数组,但这只会创建一个googlePlacesObj.results.size()个空对象的数组。

您必须使用mn[i] = new mNearbyPlaceMini();初始化数组中的每个对象。 只有这样,您才能在不获取NullPointerException的情况下访问mn[i]

答案 1 :(得分:1)

试试这个:

ArrayList<mNearbyPlaceMini> mn = new ArrayList<mNearbyPlaceMini>();
for (int i = 0; i < googlePlacesObj.results.size(); i++) {
                        mGooglePlaces.place place = googlePlacesObj.results.get(i);
                        Bitmap placeImageBitmap = null;
                        try {
                            URL imageUrl = new URL(place.icon);
                            placeImageBitmap = BitmapFactory.decodeStream(imageUrl.openConnection().getInputStream());
                        } catch (MalformedURLException e) {
                            e.printStackTrace();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        mNearbyPlaceMini mplaceMini = new mNearbyPlaceMini();
                        mplaceMini.placePicture = placeImageBitmap; //ERROR HERE
                        mplaceMini.placeName = place.name;
                        mn.add(mNearbyPlaceMini);
                    }