我有一个名为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>();
答案 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);
}