I have an android application that use an external movies API in order to get content of a movie via HTTP request.
Every thing was going fine until the service change the domain used for movies queries , I can't create the JSON object to fetch the received content of the response into it.
Here is the snip of the code that do the work (it was working properly before they change the URL)
try {
Add.setEnabled(true);
movieContent.setText("");
URL url = new URL("http://www.omdbapi.com/?i=&t=" + searchET.getText().toString());
Log.d("URL content", url.toString());
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
Log.d("URL content", "register URL");
urlConnection.connect();
Log.d("URL connection", "establish connection");
String res = null;
BufferedReader reader = new BufferedReader(
new InputStreamReader(urlConnection.getInputStream()));
Log.d("stream buffer", "read the stream");
StringBuilder sb = new StringBuilder();
String line = "";
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
res = sb.toString();
Log.d("movie content", res);
JSONArray ja = new JSONArray(res);
Log.d("JSON array", "created");
JSONObject jo = ja.getJSONObject(0);
and here is the log cat snip of the logs:
02-25 21:28:42.287: D/Username passed(32500): joker
02-25 21:28:42.295: D/USERFINALSESSION(32500): 2
02-25 21:28:53.311: V/ViewRoot(32500): BACK _ IME finished event: seq=1, handled=true, action=0c4s158
02-25 21:28:53.311: V/ViewRoot(32500): BACK _ IME finished mView : com.android.internal.policy.impl.PhoneWindow$DecorView@405488f0
02-25 21:28:53.436: V/ViewRoot(32500): BACK _ IME finished event: seq=2, handled=true, action=1c4s158
02-25 21:28:53.436: V/ViewRoot(32500): BACK _ IME finished mView : com.android.internal.policy.impl.PhoneWindow$DecorView@405488f0
02-25 21:28:59.873: D/URL content(32500): http://www.omdbapi.com/?i=&t=ted
02-25 21:28:59.889: D/URL content(32500): register URL
02-25 21:29:02.037: D/URL connection(32500): establish connection
02-25 21:29:03.608: D/stream buffer(32500): read the stream
02-25 21:29:03.615: D/movie content(32500): {"Title":"Ted","Year":"2012","Rated":"R","Released":"29 Jun 2012","Runtime":"106 min","Genre":"Comedy, Fantasy","Director":"Seth MacFarlane","Writer":"Seth MacFarlane (screenplay), Alec Sulkin (screenplay), Wellesley Wild (screenplay), Seth MacFarlane (story)","Actors":"Mark Wahlberg, Mila Kunis, Seth MacFarlane, Joel McHale","Plot":"As the result of a childhood wish, John Bennett's teddy bear, Ted, came to life and has been by John's side ever since - a friendship that's tested when Lori, John's girlfriend of four years, wants more from their relationship.","Language":"English","Country":"USA","Awards":"Nominated for 1 Oscar. Another 6 wins & 21 nominations.","Poster":"http://ia.media-imdb.com/images/M/MV5BMTQ1OTU0ODcxMV5BMl5BanBnXkFtZTcwOTMxNTUwOA@@._V1_SX300.jpg","Metascore":"62","imdbRating":"7.1","imdbVotes":"315,192","imdbID":"tt1637725","Type":"movie","Response":"True"}
02-25 21:29:03.748: D/dalvikvm(32500): GC_CONCURRENT freed 177K, 47% free 3041K/5639K, external 2311K/2882K, paused 4ms+5ms
02-25 21:29:03.748: D/Cursor(32500): Database path: moviesGeeks
02-25 21:29:03.748: D/Cursor(32500): Table name : watched
02-25 21:29:03.748: D/Cursor(32500): Database path: moviesGeeks
02-25 21:29:03.748: D/Cursor(32500): Table name : users
what would be the problem ? by the way the former URL was :http://mymovieapi.com
here is the code after edit the JSONArray into JSONObject: @Dayan
res = sb.toString();
Log.d("movie content", res);
/*JSONArray ja = new JSONArray(res);
Log.d("JSON array", "created");
JSONObject jo = ja.getJSONObject(0);*/
JSONObject jo= new JSONObject(res);
st = "Title : " + jo.getString("Title");
movie[0] = st;
st = null;
Log.d("JSON", movie[0]);
st = "Directors : \n" +jo.getString("Director");
movie[1] = st;
st = null;
Log.d("JSON", movie[1]);
st = "Actors : \n"+ jo.getString("Actors");
movie[2] = st;
st = null;
Log.d("JSON", movie[2]);
st = "Runtime : " + jo.getString("Runtime");
movie[3] = st;
st = null;
Log.d("JSON", movie[3]);
st = "Release Year : " + jo.getString("Released");
movie[4] = st;
st = null;
Log.d("JSON", movie[4]);
st = "Rating : " + jo.getString("imdbRating");
movie[5] = st;
st = null;
Log.d("JSON", movie[5]);
st = "Description : \n" + jo.getString("Plot");
movie[6] = st;
st = null;
Log.d("JSON", movie[6]);
Log.d("before appending", movie[6] + "");
for (int i = 0; i < movie.length - 1; ++i) {
movieContent.append(movie[i] + "\n\n");
}
imageURL = jo.getString("Poster");
movie[7] = imageURL;
Log.d("image url", movie[7] + "");
// added jafar alali
// write Json content to a file
int c = 0;
for (String content : movie) {
if (c == 0) {
writefileInitial();
c++;
}
writeJsonFile(content, JsonFileToread);
}
try {
Bitmap bitmap = BitmapFactory
.decodeStream((InputStream) new URL(imageURL)
.getContent());
moviePoster.setImageBitmap(bitmap);
} catch (MalformedURLException e) {
// TODO: handle exception
Log.d("poster", movie[7] + "");
} catch (IOException e) {
e.printStackTrace();
// TODO: handle exception
}
Add.setVisibility(View.VISIBLE);
addtolist.setVisibility(View.VISIBLE);
} catch (JSONException e) {
// TODO Auto-generated catch block
movieContent.setText("Film not found");
moviePoster.setImageBitmap(null);
Add.setVisibility(View.GONE);
addtolist.setVisibility(View.GONE);
} catch (IOException e) {
// TODO Auto-generated catch block
movieContent.setText("Error in Connection");
moviePoster.setImageBitmap(null);
Add.setVisibility(View.GONE);
addtolist.setVisibility(View.GONE);
}
catch (Exception e) {
movieContent.setText("Exception");
moviePoster.setImageBitmap(null);
Add.setVisibility(View.GONE);
addtolist.setVisibility(View.GONE);
}
// extract file content into a movie object to be inserted
movies tempMovie = new movies();
tempMovie.setTitle(movie[0]);
tempMovie.setDirector(movie[1]);
tempMovie.setActors(movie[2]);
tempMovie.setRuntime(movie[3]);
tempMovie.setYear(movie[4]);
tempMovie.setGrate(movie[5]);
tempMovie.setDescription(movie[6]);
tempMovie.setURL(movie[7]);
// insert movie into data base
// send object to data base movie inserter
try {
dbm.addMovie(tempMovie);
} catch (Exception e1) {
// TODO Auto-generated catch block
Toast tt = Toast.makeText(HomePage.this,
"Insertion failed", 3000);
tt.setGravity(Gravity.CENTER, 0, 0);
tt.show();
}
}
});
Stacktracewhen you catch thatIOExceptionyou were referring to in the comments under my answer.