自定义对象上的数组为空

时间:2017-01-03 20:49:50

标签: java android arrays

我有一个名为MovieObj的对象:

public class MovieObj {
private String title;
private String plot;
private String rating;
private String release;
private String moviePosterTag;
//
public MovieObj(){
    title = "";
    plot = "";
    rating = "";
    release = "";
    moviePosterTag = "";

}

public String getTitle() {
    return title;
}

public void setTitle(String title) {

    this.title = title;
}

public String getPlot() {
    return plot;
}

public void setPlot(String plot) {
    this.plot = plot;
}

public String getRating() {
    return rating;
}

public void setRating(String rating) {
    this.rating = rating;
}

public String getRelease() {
    return release;
}

public void setRelease(String release) {
    this.release = release;
}

public String getMoviePosterTag() {
    return moviePosterTag;
}

public void setMoviePosterTag(String moviePosterTag) {
    this.moviePosterTag = moviePosterTag;
}}

在一个名为JsonParser的单独类中,我有一个方法可以检索一些Json信息并将其放在我初始化的MoviesObj数组中:

public MovieObj[] getMovieObjectsL(String moviesJsonString) throws JSONException {
    final String MOVIEDB_RESULTS = "results";
    final String POSTER_PATH = "poster_path";

    JSONObject jsonObject = new JSONObject(moviesJsonString);
    JSONArray results =  jsonObject.getJSONArray(MOVIEDB_RESULTS);

    MovieObj movieObjs[] = new MovieObj[results.length()];

    for (int i = 0; i<results.length();i++){
        JSONObject individualMovie = results.getJSONObject(i);
        String moviePosterTag = individualMovie.getString(POSTER_PATH);
        movieObjs[i].setMoviePosterTag(moviePosterTag);

    }

    return movieObjs;
}

此方法分配给我在主要活动中的ASyncTask中的MoviesObj数组:

MovieObj [] movieObjs = null;

        try {
            final String BASE_URL = "http://api.themoviedb.org/";
            String SEARCH_BY = "3/movie/popular";
            final String API_KEY_SEARCH = "?api_key=";
            final String API_KEY ="blah blah blah";
            final String LANGUAGE_PARAM = "&language=";
            final String LANGUAGE = "en-US";
            final String PAGE_PARAM = "&page=";
            final String PAGE_NUM = "1";

            if (sortBy().equals("Top Rated")){
                 SEARCH_BY = "3/movie/top_rated";
            }

            Uri builtUri = Uri.parse(BASE_URL).buildUpon()
                    .appendEncodedPath(SEARCH_BY + API_KEY_SEARCH + API_KEY + LANGUAGE_PARAM + LANGUAGE + PAGE_PARAM + PAGE_NUM)
                    .build();
            URL url = new URL(builtUri.toString());

            urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.setRequestMethod("GET");
            urlConnection.connect();

            // Read the input stream into a String
            InputStream inputStream = null;

            inputStream = urlConnection.getInputStream();
            StringBuffer buffer = new StringBuffer();
            if (inputStream == null) {
                Log.v("1", "nothing retrieved");
            }
            reader = new BufferedReader(new InputStreamReader(inputStream));

            String line;

            try {
                while ((line = reader.readLine()) != null) {
                    buffer.append(line + "\n");//Helpful for debugging
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            if (buffer.length() == 0) {
                Log.v("1", "nothing in bufferedString");
            }else{
                moviesJsonStr = buffer.toString();

                JSONParser jsonParser = new JSONParser();


                *****movieObjs = jsonParser.getMovieObjectsL(moviesJsonStr);

                for (int i = 0; i < movieObjs.length; i++){
                    Log.v("test", "MOVIES = " + movieObjs[i].getMoviePosterTag());
                }
            }

每次运行此操作时,我都会从JsonParser类中的方法获取数组上的空指针异常:

NullPointerException: Attempt to invoke virtual method 'void .popularmovies.data_helpers.MovieObj.setMoviePosterTag(java.lang.String)' on a null object reference

为什么这个数组为空?我以为我在这里的方法中初始化了它:

ArrayList<MovieObj> movieObjs = new ArrayList<MovieObj>();

1 个答案:

答案 0 :(得分:1)

您没有初始化数组中的元素。试试这个:

for (int i = 0; i<results.length();i++){
    movieObjs[i] = new MovieObj();
    JSONObject individualMovie = results.getJSONObject(i);
    String moviePosterTag = individualMovie.getString(POSTER_PATH);
    movieObjs[i].setMoviePosterTag(moviePosterTag);
}